本章介绍numpy的I/O函数。
1、numpy.loadtext()
numpy.loadtxt(fname, dtype=, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
1>功能:
从*.txt (文本文件)中获取数据,每行数据的数量必须相同。
2>参数说明:
fname:文件名称或者路径字符串。如果文件是压缩文件(.gz,.bz2后缀)文件必须先解压。
dtype:输出数组的数据类型。如果这里的数据类型是结构型的数据({‘names’:(‘name1’.....),'formats':('format_1',......)}),那么输出的数组将是一维数组,每个数组元素的结构与所设置的数据结构相同。结构型数据的列数必须和文件每行列数相同。
dtype=int #整个sh输出数组元素为int类型
dtype={'names':('a','b','c'),'formats':(int,float,int)} #文件列数为3,输出数组为一维数组,每个数组元素为所设置的格式。注意,names对应的元组里必须是字符串。names 和formats是固定格式。
>>>[(10, 2., 3) (30, 4., 5)]
commets:注释标记,默认为“#”,其后面的文字将不被载入。
delimiter:分隔符。用来分割数据。接受字符串
delimiter="," #默认为空白键
converters:这里接受一个字典,建立一个从列号(column number)到一个函数的映射。函数的参数是所在列的元素。这个参数可以在所在列丢失数据的情况下为该处数据设置一个默认值。用法:
converters={3: lambda x: float(x.strip() or 0} #在第4列操作,映射到一个匿名函数,参数为x,当数据缺失的时候,用0来填充。
converters={0:function} #第1列操作,映射到function函数。
skiprows:跳过的行数,默认为0,即从第一行开始。
usecols:使用的列序,
usecols=(1,2) #使用第2列和第三列数据
>>>[[2. 3.] [4. 5.]]
2、numpy.genfromtxt()
numpy.genfromtxt(fname, dtype=, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None)
1>功能:
此函数的作用同loadtext,但是较前者更为强大,所接受的文件类型包括文本文档,csv文档,以及压缩文档(gzip,bz2)。
2>参数说明:
除了与以上函数相同的参数使用方法之外,genfromtxt还有众多特有的有用方法。
missing_values:此参数用来识别缺失数据,与之相对的filling_values用来处理缺失的数据。此处可以接受 字符串、序列字符、字典三种数据类型。这三种数据类型中,字符串用来控制所有列的缺失数据标记;序列字符按顺序控制每一列缺失数据的标记;字典中,索引项可以表示列数或者列名称,对应的项为缺失标记。filling_values也有同样的用法。
filling_values:此参数用来填充用missing_values标记的缺失数据。
1,*,3;3,4,5 #使用的数据,“*”为缺失部分
np.genfromtxt('test.txt',delimiter=',',missing_values='*',filling_values='-1') #标记处缺失数据是用*表示,采用-1来替换缺失数据
>>>[[ 1. -1. 3.] [ 3. 4. 5.]]
autostrip:自动的去除元素中的空格键,接受布尔类型的值
max_rows:所读取的最大行数。必须和skip_footer一起使用。
skip_footer:从尾部开始跳过的行数。
dtype:所接受的参数类型与上一个函数稍有不同,可以接受一个字符串,序列,以及(name,type)型的元组。
arr=np.genfromtxt('test.txt',delimiter=',',dtype=(int,float,complex)) #序列
>>>[(1, nan, 3.+0.j) (3, 4., 5.+0.j)]
arr=np.genfromtxt('test.txt',delimiter=',',dtype=complex) #单个类型
>>>[[ 1.+0.j nan+0.j 3.+0.j] [ 3.+0.j 4.+0.j 5.+0.j]]
arr=np.genfromtxt('test.txt',delimiter=',',dtype=[('0',int),('1',complex),('2',complex)]) #(name,type)型元组,这里name可以通过names参数设置。
>>>[(1, nan+0.j, 3.+0.j) (3, 4.+0.j, 5.+0.j)]
names:此参数用来给每列分配一个名字