我用pandas处理数据.我喜欢这种方法,因为在pandas中操作数据非常容易(选择行,添加行,删除列,分组,连接表等).
我的问题是,如果数据庞大,大熊猫也是一个很好的方法.特别是我担心修改和提取数据.在我可以修改数据或从数据中提取某些东西之前,我需要从文件中读取(加载)数据,然后,在我做了我想做的事情(选择或修改)之后,我需要将数据保存回文件.我担心这种“加载”和“保存”如果数据可能对于大数据来说非常慢.通过庞大的数据,我了解了数亿行.
特别是,我的问题是pandas是否可以用作数据库的替代品(例如sqlite或MySQL).或者,与查找保存为文件的相应数据帧中的相同行相比,使用Python的python接口查找巨大表中的特定行(保存在MysqL数据库中)是否更快?
解决方法:
由于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)
因此,您现在要做的就是为数据帧提供那些数量的维度,并自己查看它是否足够快以满足您的需求.这很容易玩!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。