Спосіб прочитати кілька перших рядків для кадру даних pandas


100

Чи існує вбудований спосіб для 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))

Це не так погано, але чи є більш лаконічний, «пандадичний» (?) Спосіб зробити це за допомогою ключових слів чи щось інше?


1
Щоб побачити, як завантажити останні N рядків,
замовте

7
Ви мали на увазі "пандастичний"? :)
1 ''

Відповіді:


182

Я думаю, ви можете використовувати 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

Чудово, мабуть, пропустили цей параметр. Дякую.
beardc

3
skiprows=Noneтакож корисний параметр, який слід пам’ятати
Нітін

Який найкращий спосіб завантажити останні n рядків? В основному, що робить tail (), але мені потрібно використовувати його під час завантаження csv. Спасибі заздалегідь!
Данаїл Петров
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.