Cách đọc vài dòng đầu tiên cho khung dữ liệu gấu trúc


100

Có cách nào được tích hợp sẵn để sử dụng read_csvđể chỉ đọc những ndòng đầu tiên của tệp mà không cần biết trước độ dài của các dòng không? Tôi có một tệp lớn phải mất nhiều thời gian để đọc và đôi khi chỉ muốn sử dụng đoạn đầu tiên, chẳng hạn, 20 dòng để lấy mẫu của nó (và không muốn tải toàn bộ và lấy phần đầu của nó).

Nếu tôi biết tổng số dòng, tôi có thể làm điều gì đó giống như footer_lines = total_lines - nvà chuyển điều này cho skipfootertừ khóa arg. Giải pháp hiện tại của tôi là lấy các ndòng đầu tiên bằng python và StringIO theo cách thủ công cho gấu trúc:

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))

Nó không tệ lắm, nhưng có cách nào ngắn gọn hơn, 'pandasic' (?) Để làm điều đó với các từ khóa hay gì đó không?


1
Để xem làm thế nào để nạp cuối cùng N dòng kiểm SO này bài
zelusp

7
Ý của bạn là "pandastic"? :)
1 ''

Câu trả lời:


182

Tôi nghĩ bạn có thể sử dụng nrowstham số. Từ các tài liệu :

nrows : int, default None

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

mà dường như hoạt động. Sử dụng một trong các tệp thử nghiệm lớn tiêu chuẩn (988504479 byte, 5344499 dòng):

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

Tuyệt vời, chắc hẳn đã bỏ lỡ thông số đó. Cảm ơn.
râuc

3
skiprows=Nonecũng là một tham số hữu ích để nhớ
Nitin

Cách tốt nhất để tải n hàng cuối cùng là gì? Về cơ bản thì tail () làm gì, nhưng tôi cần sử dụng nó khi tải csv. Cảm ơn trước!
Danail Petrov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.