วิธีอ่านสองสามบรรทัดแรกสำหรับแพนด้าดาต้าเฟรม


107

มีวิธีในตัวในการใช้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บรรทัดสุดท้ายเช็คเอาต์SO โพสต์นี้
zelusp

7
คุณหมายถึง "pandastic" หรือเปล่า :)
1 ''

คำตอบ:


192

ฉันคิดว่าคุณสามารถใช้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

4
skiprows=Noneยังเป็นพารามิเตอร์ที่มีประโยชน์ในการจดจำ
Nitin

วิธีที่ดีที่สุดในการโหลด n แถวสุดท้ายคืออะไร? โดยพื้นฐานแล้ว tail () ทำอะไร แต่ฉันต้องใช้มันในขณะที่โหลด csv ขอบคุณล่วงหน้า!
Danail Petrov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.