当前位置:   article > 正文

python入门系列(10): python对CSV、Excel、txt、dat、mat文件的处理_python excel to mat

python excel to mat

一、CSV文件读写

1、读取

1.1 基于python csv库

从CSV文件读取到 list:

#加载数据  
def loadCSV(filename):  
    dataSet=[]  
    with open(filename,'r') as file:  
        csvReader=csv.reader(file)  
        for line in csvReader:  
            dataSet.append(line)  
    return dataSet  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

读取的方式,是一行一行读取。

1.2 pandas读取

import pandas as pd
test_df = pd.read_csv(r'G:\test_linearRegression.csv',  
sep = '\t', header = None)
  • 1
  • 2
  • 3

pandas 包读取后的数据是 dataframe的格式。

1.3 numpy包读取
csv 格式的文件默认是, 分割(也有可能是\t等符号分割),在知道分割符的情况下,可以使用numpy包的 genfromtext进行读取文件。读取后文件的格式是 numpy.array .

from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')
  • 1
  • 2

2、写入

import csv

#程序三
with open(r'G:\0pythonstudy\chengxu\test.csv','w',newline='') as myFile:      
    myWriter=csv.writer(myFile)  
    myWriter.writerow([7,'g'])  
    myWriter.writerow([8,'h'])  
    myList=[[1,2,3],[4,5,6]]  
    myWriter.writerows(myList)  
    
# myFile.close()

with open(r'G:\0pythonstudy\chengxu\test.csv',"r") as data:
    result=csv.reader(data)
    for item in result:
        print(item)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

如果写入,纯用 open(r'G:\0pythonstudy\chengxu\test.csv','w'), 没有newline='',就会出现多出一空行。

二、Excel文件处理

1、读取

方法一:

使用Python的 xlrd包。

#1、导入模块
import xlrd

#2、打开Excel文件读取数据
data = xlrd.open_workbook('test_data.xlsx')
# print('data',data)

#3、使用技巧
#获取一个工作表
table = data.sheets()[0]          #通过索引顺序获取
# print('table',table)
print(table.nrows)#table 行数
print(table.ncols)
table = data.sheet_by_index(0) #通过索引顺序获取
# print('table',table)
table = data.sheet_by_name(u'Sheet1')#通过名称获取
 
# 获取整行和整列的值(数组)

i=1
print(table.row_values(i))#获得第i行数据

print(table.col_values(i))#获得第i列数据
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

运行结果:

9
2
[2.0, 6.0]
[5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0]
  • 1
  • 2
  • 3
  • 4

方法二:
或者,可以把Excel文件转换成csv格式文件,直接修改后缀名,好像会出错,还是建议另存为修改成csv文件。


方法三:
使用pandas包

import pandas as pd
test_df = pd.read_excel(r'G:\test.xlsx')
  • 1
  • 2

pandas 读取为dataframe格式,其中dataframe.valuesnparray格式,nparray.tolist()python list 格式。

注意:pandas和 xlrd的区别在于,pandas会把第一行和第一列作为索引的表头;xlrd则会把所有的数据都读取,没有索引表头一说。

三、dat文件处理

方法一:用numpy包直接读取

c = np.fromfile('test2.dat', dtype=int)
  • 1

方法二:
或者,把 .dat 文件修改成 .txt格式文件。

这里可以参考 python批量更改文件后缀名 一文。

方法三(推荐):用pandas包读取
在文件 users.dat 里边的内容如下:

1::F::1::10::48067
2::M::56::16::70072
3::M::25::15::55117
4::M::45::7::02460
5::M::25::20::55455
  • 1
  • 2
  • 3
  • 4
  • 5

读取方式:

import pandas as pd

df = pd.read_csv(path+"users.dat", sep = "::", header=None, 
names=["UserID","Gender","Age","Occupation","Zipcode"])
  • 1
  • 2
  • 3
  • 4

这里,sep 是指分隔符, header 是指用那行作为 dataframe的列名,这里是没有列名,只能自己定义 names 作为列名。
效果如下:

   UserID Gender  Age  Occupation Zipcode
0       1      F    1          10   48067
1       2      M   56          16   70072
2       3      M   25          15   55117
3       4      M   45           7   02460
4       5      M   25          20   55455
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

关于, dataframepandas包处理数据的格式。

四、txt文件处理

使用numpy读取。

a = numpy.loadtxt('odom.txt') 
  • 1
a [[  2.49870000e-01
    2.50250000e-01
 [  3.64260000e+03
    3.72430000e+03
 [  4.53960000e+03
    4.50590000e+03
 ...,
 [  4.74110000e+01
    4.89660000e+01
 [  4.10930000e+01
    4.20480000e+01
 [  1.83510000e+01
    1.68250000e+01
a.shape (52, 500)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

五、mat文件读写

mat是MATLAB格式,使用python读取,会得到一个字典。

1.读取

import numpy as np 
import os 
os.chdir(r'F:/data')

import scipy.io as scio
data = scio.loadmat('97.mat')
print(data)

de = data['X097_DE_time']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行结果:
这是一个字典。

{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Mon Jan 31 15:28:20 2000', '__version__': '1.0', '__globals__': [], 'X097_DE_time': array([[ 0.05319692],
       [ 0.08866154],
       [ 0.09971815],
       ...,
       [-0.03463015],
       [ 0.01668923],
       [ 0.04693846]]), 'X097_FE_time': array([[0.14566727],
       [0.09779636],
       [0.05485636],
       ...,
       [0.14053091],
       [0.09553636],
       [0.09019455]]), 'X097RPM': array([[1796]], dtype=uint16)}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

读取的另一种方式,顺便把mat转换为array。(推荐):

from mat4py import loadmat
import numpy as np
data = np.array(loadmat('test.mat')['dictKey']).astype('float')
  • 1
  • 2
  • 3

这两种方式只是使用的库不同而已。


最近开通了个公众号,主要分享python原理与应用,推荐系统,风控等算法相关的内容,感兴趣的伙伴可以关注下。
在这里插入图片描述
公众号相关的学习资料会上传到QQ群596506387,欢迎关注。


Reference:

  1. Python csv模块
  2. python_xlrd对Excel处理
  3. python : 将txt文件中的数据读为numpy数组或列表;
  4. pandas read_csv API官网;
  5. scipy loadmat
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/536552
推荐阅读
相关标签
  

闽ICP备14008679号