为了管理在进行分析时使用的RAM数量,我在hdf5(.h5)中存储了一个大数据集,我需要使用Pandas高效地查询这个数据集。
数据集包含一组应用程序的用户性能数据。我只想从40个可能的字段中提取一些字段,然后将生成的数据框筛选为仅使用我感兴趣的几个应用之一的用户。
# list of apps I want to analyze
apps = ['a','d','f']
# Users.h5 contains only one field_table called 'df'
store = pd.HDFStore('Users.h5')
# the following query works fine
df = store.select('df',columns=['account','metric1','metric2'],where=['Month==10','IsMessager==1'])
# the following pseudo-query fails
df = store.select('df',columns=['account','metric1','metric2'],where=['Month==10','IsMessager==1', 'app in apps'])
我意识到字符串“app-in-apps”不是我想要的。这只是我希望实现的目标的类似SQL的表示。我似乎无法以任何方式传递字符串列表,但一定有办法。
现在,我只是运行没有这个参数的查询,然后在接下来的步骤中过滤掉不需要的应用程序
df = df[df['app'].isin(apps)]
但这效率要低得多,因为所有的应用程序都需要先加载到内存中,然后我才能删除它们。在某些情况下,这是个大问题,因为我没有足够的内存来支持整个未过滤的df。
你很接近。
将存储作为表编写(注意,在0.12中,您将使用
table=True
,而不是format='table'
)。记住在创建表时指定要查询的data_columns
(或者可以指定data_columns=True
)语法在master/0.13中,is in是通过
query_column=list_of_values
完成的。这是以字符串的形式显示的。语法在0.12中,这必须是一个列表(它和条件)。
相关问题 更多 >
编程相关推荐