Czy istnieje wbudowany sposób read_csv
odczytu tylko pierwszych n
wierszy 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 - n
i przekazać to do skipfooter
słowa kluczowego arg. Moje obecne rozwiązanie polega na ręcznym przechwyceniu pierwszych n
wierszy 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?
Odpowiedzi:
Myślę, że możesz użyć
nrows
parametru. 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
źródło
skiprows=None
jest również użytecznym parametrem do zapamiętania