Numpy_05_文件的读取与存储

17 篇文章 2 订阅

一、文件的读取

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高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值