2013-03-21 8 views
6

を使用して推論されたデータフレームの種類を取得しますか?私は一度に全体 データセットで読むかのようDTYPEと他のメタ情報を保持どのように私は、ファイルを介して繰り返しチャンクにpd.read_csv()を使用することができますし、 繰り返しチャンクサイズ

メモリに収まらないほど大きすぎるデータセットを読み込む必要があります。私はpd.read_csvを使用してファイルをインポートし、直ちにそのチャンクをHDFStoreに追加したいと思います。しかし、データ型推論では、後続のチャンクについては何も知らない。

テーブルに格納されている最初のチャンクがintのみを含み、後続のチャンクがfloatを含む場合、例外が発生します。だから私は最初にread_csvを使ってデータフレームを繰り返し、の最高のの推論型を保持する必要があります。さらに、オブジェクト型の場合、テーブルに文字列として格納されるため、最大長を保持する必要があります。

データセット全体を読み取らずにこの情報のみを保持するというパンデミックな方法はありますか?

答えて

8

私はこれが直感的ではないと思っていました。それ以外の場合は質問を投稿しませんでした。しかし、もう一度、パンダは物事を微風にします。しかし、この情報として質問を維持することは、大量のデータを扱う他の人に役に立つかもしれません:

In [1]: chunker = pd.read_csv('DATASET.csv', chunksize=500, header=0) 

# Store the dtypes of each chunk into a list and convert it to a dataframe: 

In [2]: dtypes = pd.DataFrame([chunk.dtypes for chunk in chunker]) 

In [3]: dtypes.values[:5] 
Out[3]: 
array([[int64, int64, int64, object, int64, int64, int64, int64], 
     [int64, int64, int64, int64, int64, int64, int64, int64], 
     [int64, int64, int64, int64, int64, int64, int64, int64], 
     [int64, int64, int64, int64, int64, int64, int64, int64], 
     [int64, int64, int64, int64, int64, int64, int64, int64]], dtype=object) 

# Very cool that I can take the max of these data types and it will preserve the hierarchy: 

In [4]: dtypes.max().values 
Out[4]: array([int64, int64, int64, object, int64, int64, int64, int64], dtype=object) 

# I can now store the above into a dictionary: 

types = dtypes.max().to_dict() 

# And pass it into pd.read_csv fo the second run: 

chunker = pd.read_csv('tree_prop_dset.csv', dtype=types, chunksize=500) 
+0

あなたものskipRowsを使用することができますが、スキップする行のリストを=、そしてそれはとても1-9ウルサンプリングのすべての行をスキップしています私はあなたがスキップされた行を自分で生成する必要があると思うでしょう – Jeff

+0

@ジェフどのようにcsvの行の総数を知らずにこれを取得したいのですが、 – Luke

+3

すべてのdtypesを格納し、最後に減らすのではなく、各chunk反復の後にmax dtypesを選択することも検討する必要があります。たとえば、2MMの行と500のチャンクサイズを持つcsvでは、フレームに400,000行が表示されます。 – jastr

関連する問題