一、引言
讀寫數據文件的重要性就不必多說了。
二、讀取列表形式數據的文件
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]])