numpy genfromtxt使用笔记

本文详细介绍了NumPy库中的genfromtxt函数,包括如何处理不同分隔符、自动类型转换、去除空格、注释识别、跳过行、列选择、列命名及填充缺失值等。示例展示了genfromtxt在读取和处理数据文件时的灵活性和实用性。

import numpy as np
np.indices((m,n)) 生成m*n矩阵 数值为0-m,0-n

–官网
https://numpy.org/doc/stable/user/basics.io.genfromtxt.html

genfromtxt运行两个主循环。第一个循环以字符串序列转换文件的每一行。第二个循环将每个字符串转换为适当的数据类型。此机制比单循环慢,但具有更大的灵活性。

–行拆分为列 delimiter 可以指定分隔符 宽度 None(多空格视为一个) 不会删除各个条目的前导或尾随空格

data = u"1, 2, 3\n4, 5, 6"
np.genfromtxt(StringIO(data), delimiter=",")
array([[ 1., 2., 3.],
[ 4., 5., 6.]])

data = ’ 1 2 3\n 4 5 67\n890123 4’
np.genfromtxt(StringIO(data),delimiter=3)
array([[ 1., 2., 3.],
[ 4., 5., 67.],
[890., 123., 4.]])

–存在 \n 与 无\n 对比

data = ’ 1 2 3 4 5 67 890 123 4’
np.genfromtxt(StringIO(data),delimiter=None)
array([ 1., 2., 3., 4., 5., 67., 890., 123., 4.])

np.genfromtxt(StringIO(data),delimiter=None)
array([[ 1., 2., 3.],
[ 4., 5., 67.],
[890., 123., 4.]])

– autostrip 去掉空格

data=‘1, abc, 2 \n 3 , xxx ,4’
np.genfromtxt(StringIO(data),delimiter=’,’,dtype=‘U5’)
array([[‘1’, ’ abc’, ’ 2’],
['3 ‘, ’ xxx ‘, ‘4’]], dtype=’<U5’)

np.genfromtxt(StringIO(data),delimiter=’,’,dtype=‘U5’,autostrip=True)
array([[‘1’, ‘abc’, ‘2’],
[‘3’, ‘xxx’, ‘4’]], dtype=’<U5’)

– 定义注释字符

data =’’’#
… #skip
… 1,2
… 3,4
… 5,6
… 7,8 #skip
… 8,0’’’

np.genfromtxt(StringIO(data),comments=’#’,delimiter=’,’)
array([[1., 2.],
[3., 4.],
[5., 6.],
[7., 8.],
[8., 0.]])

–指定skip_header skip_footer 跳过前x行 和 后y行

data =’\n’.join(str(i) for i in range(10))
np.genfromtxt(StringIO(data),)
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

np.genfromtxt(StringIO(data),skip_header=3,skip_footer=5)
array([3., 4.])

– usecols控制显示的列 命名列和非命名列

data=‘1 2 3\n 4 5 6’
np.genfromtxt(StringIO(data),usecols=(0,-1))
array([[1., 3.],
[4., 6.]])

np.genfromtxt(StringIO(data),usecols=(0,1,-1))
array([[1., 2., 3.],
[4., 5., 6.]])

np.genfromtxt(StringIO(data),names=‘a,b,c’,usecols=(‘a’,‘c’))
array([(1., 3.), (4., 6.)], dtype=[(‘a’, ‘<f8’), (‘c’, ‘<f8’)])

np.genfromtxt(StringIO(data),names=‘a,b,c’,usecols=(‘a , c’))
array([(1., 3.), (4., 6.)], dtype=[(‘a’, ‘<f8’), (‘c’, ‘<f8’)])

–设置列名称

data=StringIO(‘1 2 3\n 4 5 6’)
np.genfromtxt(data,dtype=[(_,int) for _ in ‘abc’])
array([(1, 2, 3), (4, 5, 6)],
dtype=[(‘a’, ‘<i4’), (‘b’, ‘<i4’), (‘c’, ‘<i4’)])

data=StringIO(‘1 2 3\n 4 5 6’)
np.genfromtxt(data,names=‘a,b,c’)
array([(1., 2., 3.), (4., 5., 6.)],
dtype=[(‘a’, ‘<f8’), (‘b’, ‘<f8’), (‘c’, ‘<f8’)])

–data被读取后已为空 data.seek(0)即可

np.genfromtxt(data,names=‘a,b,c’)
main:1: UserWarning: genfromtxt: Empty input file: “<_io.StringIO object at 0x06FF0F30>”
array([], dtype=[(‘a’, ‘<f8’), (‘b’, ‘<f8’), (‘c’, ‘<f8’)])

–指定跳过第一行 与 列名

data=StringIO(“so it goest\n#a b c\n1 2 3\n4 5 6”)
np.genfromtxt(data,skip_header=1,names=True)
array([(1., 2., 3.), (4., 5., 6.)],
dtype=[(‘a’, ‘<f8’), (‘b’, ‘<f8’), (‘c’, ‘<f8’)])

data=StringIO(“so it goest\n#a b c\n1 2 3\n4 5 6”)
np.genfromtxt(data,names=True)
array([(1., 2., 3.), (4., 5., 6.)],
dtype=[(‘so’, ‘<f8’), (‘it’, ‘<f8’), (‘goest’, ‘<f8’)])

–指定显示类型与列名称

data=StringIO(‘1 2 3\n 4 5 6’)
ndtype=[(‘a’,int),(‘b’,float),(‘c’,int)]
name=[‘A’,‘B’,‘C’]
name
[‘A’, ‘B’, ‘C’]

np.genfromtxt(data,names=name,dtype=ndtype)
array([(1, 2., 3), (4, 5., 6)],
dtype=[(‘A’, ‘<i4’), (‘B’, ‘<f8’), (‘C’, ‘<i4’)])

–不指定列名与指定不足时显示

data=StringIO(‘1 2 3\n 4 5 6’)
np.genfromtxt(data,dtype=(int,float,int))
array([(1, 2., 3), (4, 5., 6)],
dtype=[(‘f0’, ‘<i4’), (‘f1’, ‘<f8’), (‘f2’, ‘<i4’)])

data=StringIO(‘1 2 3\n 4 5 6’)
np.genfromtxt(data,dtype=(int,float,int),names=‘a’)
array([(1, 2., 3), (4, 5., 6)],
dtype=[(‘a’, ‘<i4’), (‘f0’, ‘<f8’), (‘f1’, ‘<i4’)])

–defaultfmt指定显示列名格式

np.genfromtxt(data,dtype=(int,float,int),defaultfmt=‘var_%02i’)
array([(1, 2., 3), (4, 5., 6)],
dtype=[(‘var_00’, ‘<i4’), (‘var_01’, ‘<f8’), (‘var_02’, ‘<i4’)])

–filling_values missing_values

data=‘N/A,2,3\n4,???’
kwargs=dict(delimiter=’,’,dtype=int,names=‘a,b,c’,missing_values={0:‘N/A’,‘b’:"",2:’???’},filling_values={0:0,‘b’:0,2:-999})
np.genfromtxt(StringIO(data),**kwargs)
array([(0, 2, 3), (4, 0, -999)],
dtype=[(‘a’, ‘<i4’), (‘b’, ‘<i4’), (‘c’, ‘<i4’)])

– 使用列转换函数

data=‘1,2.3%,45\n6,78.9%,0’
np.genfromtxt(StringIO(data),delimiter=’,’)
array([[ 1., nan, 45.],
[ 6., nan, 0.]])

convertfunc=lambda x:float(x.strip(b’%’))/100
np.genfromtxt(StringIO(data),converters={1:convertfunc},delimiter=’,’)
array([[1.00e+00, 2.30e-02, 4.50e+01],
[6.00e+00, 7.89e-01, 0.00e+00]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值