赞
踩
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 pandas读取
import pandas as pd
test_df = pd.read_csv(r'G:\test_linearRegression.csv',
sep = '\t', header = None)
pandas 包读取后的数据是 dataframe
的格式。
1.3 numpy包读取
csv
格式的文件默认是,
分割(也有可能是\t
等符号分割),在知道分割符的情况下,可以使用numpy包的 genfromtext
进行读取文件。读取后文件的格式是 numpy.array
.
from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')
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)
如果写入,纯用 open(r'G:\0pythonstudy\chengxu\test.csv','w')
, 没有newline=''
,就会出现多出一空行。
方法一:
使用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列数据
运行结果:
9
2
[2.0, 6.0]
[5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0]
方法二:
或者,可以把Excel文件转换成csv格式文件,直接修改后缀名,好像会出错,还是建议另存为修改成csv文件。
方法三:
使用pandas包
import pandas as pd
test_df = pd.read_excel(r'G:\test.xlsx')
pandas
读取为dataframe
格式,其中dataframe.values
是nparray
格式,nparray.tolist()
是python list
格式。
注意:pandas和 xlrd的区别在于,pandas会把第一行和第一列作为索引的表头;xlrd则会把所有的数据都读取,没有索引表头一说。
方法一:用numpy包直接读取
c = np.fromfile('test2.dat', dtype=int)
方法二:
或者,把 .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
读取方式:
import pandas as pd
df = pd.read_csv(path+"users.dat", sep = "::", header=None,
names=["UserID","Gender","Age","Occupation","Zipcode"])
这里,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
关于, dataframe
是pandas
包处理数据的格式。
使用numpy读取。
a = numpy.loadtxt('odom.txt')
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)
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']
运行结果:
这是一个字典。
{'__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)}
读取的另一种方式,顺便把mat转换为array。(推荐):
from mat4py import loadmat
import numpy as np
data = np.array(loadmat('test.mat')['dictKey']).astype('float')
这两种方式只是使用的库不同而已。
最近开通了个公众号,主要分享python原理与应用,推荐系统,风控等算法相关的内容,感兴趣的伙伴可以关注下。
公众号相关的学习资料会上传到QQ群596506387,欢迎关注。
Reference:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。