Способ чтения первых нескольких строк для фрейма данных pandas

101

Есть ли встроенный способ использовать read_csvдля чтения только первых nстрок файла, не зная заранее длины строк? У меня есть большой файл, чтение которого занимает много времени, и иногда я хочу использовать только первые, скажем, 20 строк, чтобы получить его образец (и предпочитаю не загружать его полностью и не брать на себя его главу).

Если бы я знал общее количество строк, я мог бы сделать что-то вроде footer_lines = total_lines - nи передать это skipfooterключевому слову arg. Мое текущее решение - вручную захватить первые 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))

Это не так уж плохо, но есть ли более лаконичный, «пандийский» (?) Способ сделать это с помощью ключевых слов или чего-то подобного?

бородаc
источник
1
Чтобы увидеть, как загрузить последние N строк, ознакомьтесь с этим сообщением SO
zelusp
7
Вы имели в виду "пандастик"? :)
1 ''

Ответы:

185

Думаю, можно использовать 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
DSM
источник
Отлично, наверное, пропустил этот параметр. Спасибо.
beardc
4
skiprows=Noneтоже полезный параметр, который нужно запомнить
Nitin
Как лучше всего загрузить последние n строк? В основном то, что делает tail (), но мне нужно использовать его при загрузке csv. Заранее спасибо!
Данаил Петров