pandas和文件系统可以用作数据库的替代品吗?

时间:2013-02-28 17:24:34

标签: python database pandas

我使用pandas处理数据。我喜欢这种方法,因为在pandas中操作数据非常容易(选择行,添加行,删除列,分组,连接表等)。

我的问题是,如果数据庞大,大熊猫也是一个很好的方法。特别是我担心修改和提取数据。在我可以修改数据或从数据中提取某些东西之前,我需要从文件中读取(加载)数据,然后,在我做了我想做的事情(选择或修改)之后,我需要将数据保存回文件。我担心这种“加载”和“保存”如果数据可能对于大数据来说非常慢。通过庞大的数据,我了解了数亿行。

特别是,我的问题是pandas是否可以用作数据库的替代品(例如SQLite或MySQL)。或者,与在相应的数据框中查找保存为文件的相同行相比,使用Python的python接口查找巨大的表中的特定行(保存在MySQL数据库中)是否会更快。

1 个答案:

答案 0 :(得分:6)

由于pandas 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)

因此,您现在要做的就是为数据框提供那些数量的维度,并自己查看它是否足够快以满足您的需求。这很容易玩!