2013-02-21 65 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