2013-02-21 34 views
37

是否有内置的方式可以使用read_csv在不知道提前行长的情况下只读取文件的第一行n?我有一个需要很长时间阅读的大文件,偶尔只需要使用第一行,例如20行来获取它的一个样本(并且不想加载完整的内容并将它放在头上)。读取大熊猫数据帧的前几行的方法

如果我知道我可以做类似footer_lines = total_lines - n的行的总数并将其传递给skipfooter关键字arg。我目前的解决方案是将第一n线,Python和StringIO的手动将其抢来的大熊猫:

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

要了解如何加载最后的_N_行结帐[this SO post](http://stackoverflow.com/questions/17108250/efficiently-read-last-n-rows-of-csv-into-dataframe) – zelusp 2016-09-27 03:09:09

+0

你的意思是“pandastic”吗? :) – 2018-01-15 07:08:22

回答

69

我认为你可以使用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 
+0

太棒了,一定是错过了那个参数。谢谢。 – beardc 2013-02-21 18:11:05

-2

这里是选项

df = pd.read_csv("file.csv") 
df.head() 

它打开一个CSV和读取前5行。

+0

这仍然会读取整个文件。 OP要求一种方法来**只读第一行。 – 2017-06-20 10:07:27