Python数据分析之Numpy用于数组的文件输入输出

1、CSV文件

CSV(Comma-Separated Value,逗号分隔值),一种常见的文件格式,用来存储批量数据。

(1)np.savetxt    np.loadtxt

np.savetxt(frame,array,fmt='%.18e',delimiter=None)    #存储
——frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
——array:存入文件的数组
——fmt:写入文件的格式,例如:%d%.2f%.18e(科学计数法,保留18小数的一个浮点数形式)
——delimiter:分割字符串,默认是任何空格

例如:np.savetxt('a.csv',a,fmt='%d',delimiter=',')
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
——frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
——dtype:数据类型,可选
——delimiter:分隔字符串,默认是任何空格
——unpack:如果True,读入属性将分别写入不同变量
b = np.loadtxt('a.csv',delimiter=',')
b
Out[6]: 
array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,
        13., 14., 15., 16., 17., 18., 19.],
       [20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,
        33., 34., 35., 36., 37., 38., 39.],
       [40., 41., 42., 43., 44., 45., 46., 47., 48., 49., 50., 51., 52.,
        53., 54., 55., 56., 57., 58., 59.],
       [60., 61., 62., 63., 64., 65., 66., 67., 68., 69., 70., 71., 72.,
        73., 74., 75., 76., 77., 78., 79.],
       [80., 81., 82., 83., 84., 85., 86., 87., 88., 89., 90., 91., 92.,
        93., 94., 95., 96., 97., 98., 99.]])

b = np.loadtxt('a.csv',dtype=np.int,delimiter=',')

2、对ndarray

(1)a.tofile

a.tofile(frame,sep='',format='%s')
——frame:文件、字符串
——sep:数据分割字符串,如果是空串或者不指定,写入文件为二进制,无法用编译器看懂
——format:写入数据的格式

与CSV不同,结果只是逐一列出,没有维度格式

Python数据分析之Numpy用于数组的文件输入输出_第1张图片

(2)np.fromfile

np.fromfile(frame,dtype=float,count=-1,sep='')
——frame:文件、字符串
——dtype:读取的数据类型
——count:读入元素个数,-1表示读入整个文件
——sep:数据分割字符串,如果是空串,写入文件为二进制
a = np.arange(100).reshape(5,10,2)
a.tofile("b.bat",sep=",",format='%d')
c = np.fromfile("b.dat",dtype=np.int,sep=",")
c
Out[14]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
       34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
       51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
       68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
       85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])

c = np.fromfile("b.dat",dtype=np.int,sep=",").reshape(5,10,2)

二进制:
a = np.arange(100).reshape(5,10,2)
a.tofile("b.dat",format='%d')
c = np.fromfile('b.dat',dtype=np.int).reshape(5,10,2)
c
Out[20]: 
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5],
        [ 6,  7],
        [ 8,  9],
        [10, 11],
        [12, 13],
        [14, 15],
        [16, 17],
        [18, 19]],
        …………
       [[80, 81],
        [82, 83],
        [84, 85],
        [86, 87],
        [88, 89],
        [90, 91],
        [92, 93],
        [94, 95],
        [96, 97],
        [98, 99]]])

需要注意的是,该方法需要读取时知道存入文件时,数组的维度和元素类型

a.tofile()和np.fromfile()需要配合使用

3、NumPy的便捷文件存取

np.save(fname,array)或np.savez(fname,array)
——fname:文件名,以.npy为扩展名,压缩扩展名为.npz
——array:数组变量

np.load(fname) #把文件读回来,并还原数组的维度等相关信息
——fname:文件名,以.npy为扩展名,压缩扩展名为.npz
a = np.arange(100).reshape(5,10,2)

np.save("a.npy",a)

b = np.load('a.npy')

b
Out[24]: 
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5],
        [ 6,  7],
        [ 8,  9],
        [10, 11],
        [12, 13],
        [14, 15],
        [16, 17],
        [18, 19]],
          …………
       [[80, 81],
        [82, 83],
        [84, 85],
        [86, 87],
        [88, 89],
        [90, 91],
        [92, 93],
        [94, 95],
        [96, 97],
        [98, 99]]])

 

 

你可能感兴趣的:(数据分析与数据挖掘)