我使用pandas处理数据。我喜欢这种方法,因为在pandas中操作数据非常容易(选择行,添加行,删除列,分组,连接表等)。
我的问题是,如果数据庞大,大熊猫也是一个很好的方法。特别是我担心修改和提取数据。在我可以修改数据或从数据中提取某些东西之前,我需要从文件中读取(加载)数据,然后,在我做了我想做的事情(选择或修改)之后,我需要将数据保存回文件。我担心这种“加载”和“保存”如果数据可能对于大数据来说非常慢。通过庞大的数据,我了解了数亿行。
特别是,我的问题是pandas是否可以用作数据库的替代品(例如SQLite或MySQL)。或者,与在相应的数据框中查找保存为文件的相同行相比,使用Python的python接口查找巨大的表中的特定行(保存在MySQL数据库中)是否会更快。
答案 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)
因此,您现在要做的就是为数据框提供那些数量的维度,并自己查看它是否足够快以满足您的需求。这很容易玩!