123

是否有一种内置方法可以用于read_csv仅读取n文件的第一行而不提前知道行的长度?我有一个需要很长时间才能读取的大文件,并且偶尔只想使用第一行,比如 20 行来获取它的样本(并且不想加载完整的东西并占据它的头部)。

如果我知道总行数,我可以做类似的事情footer_lines = total_lines - n并将其传递给skipfooter关键字 arg。我目前的解决方案是n使用 python 和 StringIO 手动将第一行抓取到 pandas:

import pandas as pd
from StringIO import StringIO

n = 20
with open('big_file.csv', 'r') as f:
    head = ''.join(f.readlines(n))

df = pd.read_csv(StringIO(head))

这还不错,但是有没有更简洁的“pandasic”(?)方式来使用关键字或其他方式来做到这一点?

4

2 回答 2

217

我认为您可以使用该nrows参数。从文档

nrows : int, default None

    Number of rows of file to read. Useful for reading pieces of large files

这似乎有效。使用标准的大型测试文件之一(988504479 字节,5344499 行):

In [1]: import pandas as pd

In [2]: time z = pd.read_csv("P00000001-ALL.csv", nrows=20)
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 0.00 s

In [3]: len(z)
Out[3]: 20

In [4]: time z = pd.read_csv("P00000001-ALL.csv")
CPU times: user 27.63 s, sys: 1.92 s, total: 29.55 s
Wall time: 30.23 s
于 2013-02-21T18:00:29.233 回答
1

我会在 read_csv 中使用“skiprows”参数,例如:

df = pd.read_csv(filename, skiprows=range(2, 20000), nrows=10000)
于 2021-07-30T14:37:22.290 回答