我可能正试图在这里重新发明轮子,但numpy有一个fromfile()
功能,可以读取 - 我想 - CSV文件。
它似乎非常快 - 甚至与Pandas read_csv()
相比,但我不清楚它是如何工作的。
这是一些测试代码:
import pandas as pd
import numpy as np
# Create the file here, two columns, one million rows of random numbers.
filename = 'my_file.csv'
df = pd.DataFrame({'a':np.random.randint(100,10000,1000000), 'b':np.random.randint(100,10000,1000000)})
df.to_csv(filename, index = False)
# Now read the file into memory.
arr = np.fromfile(filename)
print len(arr)
我在那里包括len()
,以确保它不是只读一行。但奇怪的是,我的长度(将根据您的随机数生成而变化)为1,352,244。咦?
The docs显示可选的sep
参数。但是当使用时:
arr = np.fromfile(filename, sep = ',')
......我们的长度为0?!
理想情况下,我可以从这个CSV文件中加载一个2D数组阵列,但我决定使用这个CSV中的单个数组。
我在这里错过了什么?
numpy.fromfile
不是为了读取.csv
文件,而是为了读取用numpy.ndarray.tofile
方法编写的数据。
来自文档:
一种使用已知数据类型读取二进制数据的高效方法,以及解析简单格式化的文本文件。使用tofile方法写入的数据可以使用此函数读取。
通过在没有sep
参数的情况下使用它,numpy假设您正在读取二进制文件,因此具有不同的长度。当你指定一个分隔符时,我想这个函数就会破坏。
要使用numpy读取.csv
文件,我想你可以使用numpy.genfromtext
或numpy.loadtxt
(来自这个question)。