方法为pandas数据帧读取前几行

bea*_*rdc 82 python csv dataframe pandas

有没有内置的方法可以在不知道行的长度的情况下read_csv只读取n文件的第一行?我有一个大文件,需要很长时间才能阅读,偶尔只想使用第一行,比方说20行来获取它的样本(并且不想加载完整的东西并占据它的头部).

如果我知道我可以做的事情的总行数,footer_lines = total_lines - n并将其传递给skipfooter关键字arg.我目前的解决方案是手动抓取npython和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))
Run Code Online (Sandbox Code Playgroud)

它并没有那么糟糕,但有一种更简洁,"pandasic"(?)方式用关键字或其他方式做到这一点?

DSM*_*DSM 155

我想你可以使用nrows参数.来自文档:

nrows : int, default None

    Number of rows of file to read. Useful for reading pieces of large files
Run Code Online (Sandbox Code Playgroud)

这似乎工作.使用标准大型测试文件之一(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
Run Code Online (Sandbox Code Playgroud)

  • skiprows = None也是要记住的有用参数 (2认同)

小智 5

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

df = pd.read_csv(filename, skiprows=range(2, 20000), nrows=10000)
Run Code Online (Sandbox Code Playgroud)