【发布时间】:2018-05-02 08:38:30
【问题描述】:
为了管理我在分析时消耗的 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'])
我意识到字符串“应用程序中的应用程序”不是我想要的。这只是我希望实现的类似 SQL 的表示。我似乎无法以任何我尝试的方式传递字符串列表,但一定有办法。
现在我只是在不带此参数的情况下运行查询,然后在后续步骤中过滤掉我不想要的应用程序
df = df[df['app'].isin(apps)]
但这效率要低得多,因为所有应用程序都需要先加载到内存中,然后才能删除它们。在某些情况下,这是个大问题,因为我没有足够的内存来支持整个未过滤的 df。
【问题讨论】: