一、引言
读写数据文件的重要性就不必多说了。
二、读取列表形式数据的文件
1、我们写几行CSV格式(列表形式,两值之间逗号隔开)的数据。
id,height,age
1,175,20
2,168,18
3,177,30
4,142,12
使用genfromtxt()函数读取数据。接收三个参数:文件名,分隔符,是否有列标题
In [4]: a = np.genfromtxt(‘test.csv‘,delimiter=‘,‘,names=True) In [5]: a Out[5]: array([( 1., 175., 20.), ( 2., 168., 18.), ( 3., 177., 30.), ( 4., 142., 12.)], dtype=[(‘id‘, ‘<f8‘), (‘height‘, ‘<f8‘), (‘age‘, ‘<f8‘)])
这个函数的包含两层循环:第一层循环每一行,第二层循环将每一行中的多个值分开后转化,一次插入所创建的数组。优点是能够处理文件中缺失的数据(Nan)。
2、我们试图删除几个元素看看
id,height,age 1,175, 2,168,18 ,177,30 4,,12
In [6]: a = np.genfromtxt(‘test.csv‘,delimiter=‘,‘,names=True) In [7]: a Out[7]: array([( 1., 175., nan), ( 2., 168., 18.), ( nan, 177., 30.), ( 4., nan, 12.)], dtype=[(‘id‘, ‘<f8‘), (‘height‘, ‘<f8‘), (‘age‘, ‘<f8‘)])
可见,genfromtxt()函数将缺失的数据填充为nan值(应该是no a number)
3、获取某行或者某列
In [8]: a[0] Out[8]: ( 1., 175., nan) In [9]: a[‘height‘] Out[9]: array([ 175., 168., 177., nan])
三、二进制文件读写
save()已二进制格式保存数据,参数:文件名(不用后缀),数据。
load()从二进制文件读取数据,参数:文件名(带后缀)
1.执行sava()后,在本目录创建了my_data.npy二进制文件
In [10]: data = np.random.random((3,3)) In [11]: data Out[11]: array([[ 0.35264296, 0.81619681, 0.24089159], [ 0.31230919, 0.14782997, 0.53526203], [ 0.5505135 , 0.64876637, 0.17538648]]) In [12]: np.save(‘my_data‘,data)
2、二进制文件数据读取,以文件名作为参数,并带上.npy扩展名
In [13]: np.load(‘my_data.npy‘) Out[13]: array([[ 0.35264296, 0.81619681, 0.24089159], [ 0.31230919, 0.14782997, 0.53526203], [ 0.5505135 , 0.64876637, 0.17538648]])