Numpy CSV fromfile()

问题描述 投票:1回答:1

我可能正试图在这里重新发明轮子,但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中的单个数组。

我在这里错过了什么?

python pandas csv numpy
1个回答
2
投票

numpy.fromfile不是为了读取.csv文件,而是为了读取用numpy.ndarray.tofile方法编写的数据。

来自文档:

一种使用已知数据类型读取二进制数据的高效方法,以及解析简单格式化的文本文件。使用tofile方法写入的数据可以使用此函数读取。

通过在没有sep参数的情况下使用它,numpy假设您正在读取二进制文件,因此具有不同的长度。当你指定一个分隔符时,我想这个函数就会破坏。

要使用numpy读取.csv文件,我想你可以使用numpy.genfromtextnumpy.loadtxt(来自这个question)。

© www.soinside.com 2019 - 2024. All rights reserved.