Способ чтения первых нескольких строк для pandas dataframe
Есть ли встроенный способ использования read_csv
для чтения только первых строк n
файла, не зная длины строк раньше времени? У меня есть большой файл, который занимает много времени, чтобы читать, и изредка хочу использовать только первые, скажем, 20 строк, чтобы получить образец (и предпочитаем не загружать всю вещь и не брать ее в голову).
Если бы я знал общее количество строк, я мог бы сделать что-то вроде footer_lines = total_lines - n
и передать это ключевому слову skipfooter
. Мое текущее решение состоит в том, чтобы вручную захватить первые строки n
с помощью python и 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))
Это не так уж плохо, но есть ли более сжатый, "пандасический" (?) способ сделать это с помощью ключевых слов или чего-то еще?
Ответы
Ответ 1
Я думаю, вы можете использовать параметр nrows
. Из документы:
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
Ответ 2
Вот вариант
df = pd.read_csv("file.csv")
df.head()
Он открывает csv и читает первые 5 строк.