123

行の長さを事前に知らなくても、ファイルread_csvの最初の行だけを読み取る組み込みの方法はありますか? n読み取りに時間がかかる大きなファイルがあり、最初の 20 行だけを使用してサンプルを取得したい場合があります (完全なものをロードして先頭を取得したくない場合もあります)。

行の総数がわかっている場合は、次のようにして、これをキーワード argfooter_lines = total_lines - nに渡すことができます。skipfooter私の現在の解決策は、python で最初の行を手動で取得しn、StringIO で 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))

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

4

2 に答える 2

217

パラメータを使用できると思いますnrowsドキュメントから:

nrows : int, default None

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

これはうまくいくようです。標準の大きなテスト ファイル (988504479 バイト、5344499 行) の 1 つを使用します。

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
于 2013-02-21T18:00:29.233 に答える