Sposób na przeczytanie pierwszych kilku wierszy dla pandy dataframe

104

Czy istnieje wbudowany sposób read_csvodczytu tylko pierwszych nwierszy pliku bez wcześniejszej znajomości długości wierszy? Mam duży plik, którego odczytanie zajmuje dużo czasu, i czasami chcę użyć tylko pierwszych, powiedzmy, 20 wierszy, aby pobrać jego próbkę (i wolę nie ładować całej zawartości i zajmować się tym).

Gdybym znał całkowitą liczbę wierszy, mógłbym zrobić coś podobnego footer_lines = total_lines - ni przekazać to do skipfootersłowa kluczowego arg. Moje obecne rozwiązanie polega na ręcznym przechwyceniu pierwszych nwierszy za pomocą Pythona i StringIO do pand:

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))

Nie jest tak źle, ale czy istnieje bardziej zwięzły, „pandasowy” (?) Sposób na zrobienie tego za pomocą słów kluczowych czy czegoś takiego?

beardc
źródło
1
Aby zobaczyć, jak załadować ostatnie N linii,
sprawdź
7
Czy chodziło Ci o „pandastic”? :)
1 ''

Odpowiedzi:

189

Myślę, że możesz użyć nrowsparametru. Z dokumentów :

nrows : int, default None

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

który wydaje się działać. Używając jednego ze standardowych dużych plików testowych (988504479 bajtów, 5344499 wierszy):

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
DSM
źródło
Świetnie, musiałem przegapić ten parametr. Dzięki.
beardc
4
skiprows=Nonejest również użytecznym parametrem do zapamiętania
Nitin
Jaki jest najlepszy sposób załadowania ostatnich n wierszy? Zasadniczo to, co robi tail (), ale muszę go użyć podczas ładowania pliku csv. Z góry dziękuję!
Danail Petrov