用于数组的文件输入输出
NumPy能够读写磁盘上的文本数据或二进制数据。后面的章节将会告诉你一些pandas中用于将表格型数据读取到内存的工具。
将数组以二进制格式保存到磁盘
np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的。
- In [183]: arr = np.arange(10)
- In [184]: np.save('some_array', arr)
如果文件路径末尾没有扩展名.npy,则该扩展名会被自动加上。然后就可以通过np.load读取磁盘上的数组:
- In [185]: np.load('some_array.npy')
- Out[185]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
通过np.savez可以将多个数组保存到一个压缩文件中,将数组以关键字参数的形式传入即可:
- In [186]: np.savez('array_archive.npz', a=arr, b=arr)
加载.npz文件时,你会得到一个类似字典的对象,该对象会对各个数组进行延迟加载:
- In [187]: arch = np.load('array_archive.npz')
- In [188]: arch['b']
- Out[188]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
存取文本文件
从文件中加载文本是一个非常标准的任务。Python中的文件读写函数的格式很容易将新手搞晕,所以我将主要介绍pandas中的read_csv和read_table函数。有时,我们需要用np.loadtxt或更为专门化的np.genfromtxt将数据加载到普通的NumPy数组中。
这些函数都有许多选项可供使用:指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。以一个简单的逗号分隔文件(CSV)为例:
- In [191]: !cat array_ex.txt译注3
- 0.580052,0.186730,1.040717,1.134411
- 0.194163,-0.636917,-0.938659,0.124094
- -0.126410,0.268607,-0.695724,0.047428
- -1.484413,0.004176,-0.744203,0.005487
- 2.302869,0.200131,1.670238,-1.881090
- -0.193230,1.047233,0.482803,0.960334
该文件可以被加载到一个二维数组中,如下所示:
- In [192]: arr = np.loadtxt('array_ex.txt', delimiter=',')
- In [193]: arr
- Out[193]:
- array([[ 0.5801, 0.1867, 1.0407, 1.1344],
- [ 0.1942, -0.6369, -0.9387, 0.1241],
- [-0.1264, 0.2686, -0.6957, 0.0474],
- [-1.4844, 0.0042, -0.7442, 0.0055],
- [ 2.3029, 0.2001, 1.6702, -1.8811],
- [-0.1932, 1.0472, 0.4828, 0.9603]])
np.savetxt执行的是相反的操作:将数组写到以某种分隔符隔开的文本文件中。genfromtxt跟loadtxt差不多,只不过它面向的是结构化数组和缺失数据处理。更多有关结构化数组的知识,请参阅第12章。
注意: 更多有关文件读写(尤其是表格型数据)的知识,请参阅本书后面有关pandas和DataFrame对象的章节。
译注3:这是Linux的,Windows得用type。