微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我用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 举报,一经查实,本站将立刻删除。

相关推荐