是否有内置方法使用read_csv
只读取文件的第一行n
而不知道行的长度?我有一个大文件,需要很长时间才能阅读,偶尔只想使用第一行,比方说20行来获取它的样本(并且不想加载完整的东西并占据它的头部。) / p>
如果我知道行总数,我可以执行类似footer_lines = total_lines - n
的行,并将其传递给skipfooter
关键字arg。我目前的解决方案是使用python手动获取第一个n
行,将它串行地捕获到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”(?)方式用关键字或其他方式来做吗?
答案 0 :(得分:132)
我认为您可以使用nrows
参数。来自the docs:
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
答案 1 :(得分:0)
我会在 read_csv 中使用“skiprows”参数,例如:
df = pd.read_csv(filename, skiprows=range(2, 20000), nrows=10000)