一、文件的读取
1、np.genfromtxt():
可读取csv、txt类型文件
'''
np.genfromtxt(frame,skip_header,dtype,usecols,encoding=,delimiter=None)
常用参数说明:
frame:带路径或不带路径的文件
skip_header:指定从第几行开始读取文件(通常skip_header = 1,跳过第一行的列名,从第二行开始读取)
dtype:指定读取出来存储的数据类型
usecols:(list)指定需要读取的列(指定列的索引)
encoding:指定编码格式
delimiter:默认为None,当读取csv文件时一定要指定分隔符
'''
# 读取txt文件
stock_data = np.genfromtxt('stock_day.txt',encoding = 'utf-8')
stock_data
文件首行是列名(字符型数据),所以读取出来的数据第一行是nan
array([[ nan, nan, nan, ..., nan,
nan, nan],
[2.35300e+01, 2.58800e+01, 2.41600e+01, ..., 4.67387e+04,
5.55761e+04, 2.39000e+00],
[2.28000e+01, 2.37800e+01, 2.35300e+01, ..., 4.27363e+04,
5.60075e+04, 1.53000e+00],
...,
[1.28000e+01, 1.29200e+01, 1.29000e+01, ..., 1.00813e+05,
1.00813e+05, 2.30000e+00],
[1.25200e+01, 1.30600e+01, 1.27000e+01, ..., 1.17682e+05,
1.17682e+05, 4.76000e+00],
[1.22500e+01, 1.26700e+01, 1.25200e+01, ..., 9.62917e+04,
9.62917e+04, 3.30000e+00]])
np.genfromtxt读取txt文件
# skip_header = 1 ,从txt的第1行导入,即表头(第0行)不导入
# dtype = int,不指定读取出来的数据默认是float类型
# usecols = [0,1,2] 通过列表形式,指定想要读取的前三列
stock_data = np.genfromtxt('stock_day.txt',skip_header = 1,dtype = int,usecols = [0,1,2])
stock_data
此时跳过了文件首行,从第二行开始读取,所以不会显示nan
array([[23, 25, 24],
[22, 23, 23],
[22, 23, 22],
...,
[12, 12, 12],
[12, 13, 12],
[12, 12, 12]])
np.genfromtxt读取csv文件
'''
np.genfromtxt读取csv文件一定能要指定文件分隔符delimiter!
delimiter:默认为None,不指定的话读出来的数据全是nan
csv文件默认分隔符是 ','
'''
#
stock_data2 = np.genfromtxt('stock_day.csv',delimiter = ',',skip_header = 1)
stock_data2
读取出来的csv数据:
array([[2.35300e+01, 2.58800e+01, 2.41600e+01, ..., 4.67387e+04,
5.55761e+04, 2.39000e+00],
[2.28000e+01, 2.37800e+01, 2.35300e+01, ..., 4.27363e+04,
5.60075e+04, 1.53000e+00],
[2.28800e+01, 2.33700e+01, 2.28200e+01, ..., 4.18720e+04,
5.63728e+04, 1.32000e+00],
...,
[1.28000e+01, 1.29200e+01, 1.29000e+01, ..., 1.00813e+05,
1.00813e+05, 2.30000e+00],
[1.25200e+01, 1.30600e+01, 1.27000e+01, ..., 1.17682e+05,
1.17682e+05, 4.76000e+00],
[1.22500e+01, 1.26700e+01, 1.25200e+01, ..., 9.62917e+04,
9.62917e+04, 3.30000e+00]])
注意:
1、genfromtxt()函数不能识别日期类型的数据,会报错:‘gbk’ codec can’t decode byte 0xff in position 0: illegal multibyte sequence.
2、如果是字符型的数据,读取会显示nan.
2、np.loadtxt():
可读取csv、txt类型文件
'''
np.loadtxt(frame,dtype=,delimiter=None,skiprows=,usecols=,unpack=False)
frame:带路径或不带路径的文件
skiprows:跳过第几行(通常skiprows = 1,跳过首行)
dtype:指定读取出来存储的数据类型
usecols:(list)指定需要读取的列(指定列的索引)
encoding:指定编码格式
unpack:默认False,表示是否进行行列转置
只能读取纯数值类型的数据
'''
stock_data1 = np.loadtxt('stock_day1.txt')
stock_data1
读取出来的数据:
array([[2.35300e+01, 2.58800e+01, 2.41600e+01, ..., 4.67387e+04,
5.55761e+04, 2.39000e+00],
[2.28000e+01, 2.37800e+01, 2.35300e+01, ..., 4.27363e+04,
5.60075e+04, 1.53000e+00],
[2.28800e+01, 2.33700e+01, 2.28200e+01, ..., 4.18720e+04,
5.63728e+04, 1.32000e+00],
...,
[1.28000e+01, 1.29200e+01, 1.29000e+01, ..., 1.00813e+05,
1.00813e+05, 2.30000e+00],
[1.25200e+01, 1.30600e+01, 1.27000e+01, ..., 1.17682e+05,
1.17682e+05, 4.76000e+00],
[1.22500e+01, 1.26700e+01, 1.25200e+01, ..., 9.62917e+04,
9.62917e+04, 3.30000e+00]])
注意:
np.loadtxt()只能读取数值类型的数据,如果读取其他类型,包括字符类型都会报错。
例如:ValueError: could not convert string to float: ‘open’
二、文件的存储
np.savetxt(fname, X, fmt=’%.18e’, delimiter=’ ‘, newline=’\n’, header=’’, footer=’’, comments=’# ', encoding=None)
可保存为csv、txt文件
'''
np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
常用参数解释:
fmt:格式化数据
delimiter:分隔符
encoding:指定编码格式
'''
# fmt='%.2f',格式化保存两位小数
np.savetxt('new_stock_data.csv',stock_data1,delimiter =',',fmt='%.2f')
保存的csv文件:
一般不常用numpy去读取文件,效率没有pandas高。