web-dev-qa-db-ja.com

pandasデータフレームの最初の数行を読み取る方法

read_csvを使用して、ファイルの最初のn行のみを事前に行の長さを知らずに読み取る組み込みの方法はありますか?読み込みに時間がかかる大きなファイルがあり、場合によっては最初の、たとえば20行だけを使用してサンプルを取得することもあります(そして、すべてをロードして先頭を取得することを好みません)。

行の総数がわかっていれば、footer_lines = total_lines - nのようなことをして、これをskipfooterキーワード引数に渡すことができます。私の現在の解決策は、pythonとStringIOで最初のn行をパンダに手動で取得することです。

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

それはそれほど悪くはありませんが、キーワードまたは何かを使用してそれを行うためのより簡潔な「パンダシック」(?)方法がありますか?

78
beardc

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
143
DSM