【问题标题】:Numpy CSV fromfile()Numpy CSV fromfile()
【发布时间】:2019-07-28 14:46:30
【问题描述】:

我可能想在这里重新发明轮子,但是 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 文件加载一个二维数组数组,但我会从这个 CSV 文件中加载一个数组。

我在这里错过了什么?

【问题讨论】:

    标签: python pandas csv numpy


    【解决方案1】:

    numpy.fromfile 不用于读取.csv 文件,而是用于读取使用numpy.ndarray.tofile 方法写入的数据。

    来自文档:

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

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

    要使用 numpy 读取.csv 文件,我认为您可以使用numpy.genfromtextnumpy.loadtxt(来自此question)。

    【讨论】:

    • 感谢 araraonline,但是对于“解析简单格式化的文本文件”的部分 - 那么那些简单格式化的文本文件是什么?您认为它们应该可以在任何文本编辑器中创建,并且不需要 numpy.tofile
    • 我在这里用tofile 进行了实验,看起来它们只是一个由sep 分割的数字数组。例如:"1,2,3,4,5,6",如果值为 [1,2,3,4,5,6]。此外,它只存储一维(高维数组被展平)。
    • 这让我掉进了一个长长的兔子洞。我不得不相信它可以读取 2D 文本文件,就像使用以下答案保存的文件一样:stackoverflow.com/questions/3685265/…
    • 一眼看去,他们似乎在使用savetxtloadtxt(而不是fromfile)...也许这就是你困惑的根源(?)
    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多