Cara membaca beberapa baris pertama untuk bingkai data panda

101

Apakah ada cara bawaan untuk digunakan read_csvhanya untuk membaca nbaris pertama file tanpa mengetahui panjang baris sebelumnya? Saya memiliki file besar yang membutuhkan waktu lama untuk membaca, dan kadang-kadang hanya ingin menggunakan yang pertama, katakanlah, 20 baris untuk mendapatkan sampelnya (dan memilih untuk tidak memuat semuanya dan mengambil alih kepalanya).

Jika saya tahu jumlah barisnya, saya bisa melakukan sesuatu seperti footer_lines = total_lines - ndan meneruskan ini ke skipfooterkata kunci arg. Solusi saya saat ini adalah mengambil nbaris pertama secara manual dengan python dan StringIO ke 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))

Tidak seburuk itu, tetapi apakah ada cara yang lebih ringkas, 'pandasic' (?) Untuk melakukannya dengan kata kunci atau sesuatu?

jenggot
sumber
1
Untuk melihat bagaimana memuat baris N terakhir checkout posting SO ini
zelusp
7
Apakah yang Anda maksud "pandastic"? :)
1 ''

Jawaban:

185

Saya pikir Anda bisa menggunakan nrowsparameter. Dari dokumen :

nrows : int, default None

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

yang tampaknya berhasil. Menggunakan salah satu file uji besar standar (988504479 byte, 5344499 baris):

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
sumber
Luar biasa, pasti melewatkan parameter itu. Terima kasih.
beardc
4
skiprows=Nonejuga merupakan parameter yang berguna untuk diingat
Nitin
Apa cara terbaik untuk memuat n baris terakhir? Pada dasarnya apa yang dilakukan tail (), tetapi saya perlu menggunakannya saat memuat csv. Terima kasih sebelumnya!
Danail Petrov