3

私はパンダを使ってデータを操作しています。パンダではデータの操作が非常に簡単なので(行の選択、行の追加、列の削除、グループ化、テーブルの結合など)、このアプローチが好きです。

私の質問は、データが膨大な場合、パンダも良い方法であるかどうかです。特に、データの変更と抽出について心配しています。データを変更したり、データから何かを抽出したりする前に、ファイルからデータを読み取る(ロードする)必要があります。次に、やりたいこと(選択または変更)を行った後、データをファイルに保存し直す必要があります。巨大なデータの場合、データが非常に遅くなる可能性がある場合、この「読み込み」と「保存」が心配です。膨大なデータから、数億行を理解できます。

特に、私の質問は、パンダをデータベース(SQLiteやMySQLなど)の代わりに使用できるかどうかです。あるいは、ファイルとして保存されている対応するデータフレームで同じ行を見つけるよりも、MySQLのPythonインターフェイスを使用して巨大なテーブル(MySQLデータベースに保存されている)で特定の行を見つける方が速いでしょうか。

4

1 に答える 1

6

パンダ0.10.1以降、HDFStoreを使用してディスク上で事前に選択できます。

import pandas as pd
import numpy.random as rd

df = pd.DataFrame(rd.randn(int(1e6)).reshape(int(1e5), 10), columns=list('abcdefghij'))
store = pd.HDFStore('newstore.h5')

# only data columns can serve as indices to select for on-disk, but there's a 
# speed penalty involved, so it's a conscious decision what becomes data_column!
store.append('df', df, data_columns=['a','b'])

次のようなことが「ディスク上」で発生します(そしてかなりクールです!;)

In [14]: store.select('df', ['a > 0', 'b > 0'])
Out[14]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 24747 entries, 2 to 99998
Data columns:
a    24747  non-null values
b    24747  non-null values
c    24747  non-null values
d    24747  non-null values
e    24747  non-null values
f    24747  non-null values
g    24747  non-null values
h    24747  non-null values
i    24747  non-null values
j    24747  non-null values
dtypes: float64(10)

In [15]: store.select('df', ['a > 0'])
Out[15]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 50043 entries, 0 to 99999
Data columns:
a    50043  non-null values
b    50043  non-null values
c    50043  non-null values
d    50043  non-null values
e    50043  non-null values
f    50043  non-null values
g    50043  non-null values
h    50043  non-null values
i    50043  non-null values
j    50043  non-null values
dtypes: float64(10)

したがって、今やらなければならないのは、データフレームのディメンションの数を増やして、ニーズに十分対応できるかどうかを自分で確認することだけです。遊ぶのはとても簡単です!

于 2013-03-01T02:15:52.567 に答える