gpt4 book ai didi

python - HDF + Pandas : how can I use a where mask with multindex?

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:14 24 4
gpt4 key购买 nike

我想每天从一个巨大的 hdf5 数据中选择一个子集。使用 where mask 将是完美的,但我不能让它与多索引一起工作(因为我必须有一个有两个条件的地方)。不能将 where 掩码与多索引一起使用:

import itertools
import pandas as pd
import numpy as np
a = ('A', 'B')
i = (0, 1, 2)
idx = pd.MultiIndex.from_tuples(list(itertools.product(a, i)),
names=('Alpha', 'Int'))
df = pd.DataFrame(np.random.randn(len(idx), 7), index=idx,
columns=('I', 'II', 'III', 'IV', 'V', 'VI', 'VII'))

enter image description here

好的,现在我把它放在一个 hdf 存储中

from pandas.io.pytables import HDFStore
store =HDFStore('cancella.h5', 'w')
store.append('df_mask',df)

但如果我再读一遍,我就有了

c = store.select_column('df_mask','index')
print c

这个索引是错误的。

0    0
1 1
2 2
3 3
4 4
5 5
dtype: int64

所以我不能使用 where mask .你能帮帮我吗?

最佳答案

我猜这是因为 pandas 可能会在将表放入 HDF5 之前reset_index(原因可能是它试图避免任何潜在的重复索引,这在 dataframe 中是允许的,但是对数据库非常不利),并使用整数自动递增主键作为 HDF5 表中的索引。因此,您在帖子中编写的代码选择了这些自增主键。

可能还有其他一些更优雅的方法,但我发现了以下工作。 (如果 pandas 确实 reset_index,那么现在多级索引变成了列...)

import itertools
import pandas as pd
import numpy as np
a = ('A', 'B')
i = (0, 1, 2)
idx = pd.MultiIndex.from_tuples(list(itertools.product(a, i)),
names=('Alpha', 'Int'))
df = pd.DataFrame(np.random.randn(len(idx), 7), index=idx,
columns=('I', 'II', 'III', 'IV', 'V', 'VI', 'VII'))
print(df)

store = pd.HDFStore('/home/Jian/Downloads/temp.h5')
store.append('df_mask',df)

store.select('df_mask', columns=['Alpha','Int'])

enter image description here

关于python - HDF + Pandas : how can I use a where mask with multindex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31357896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com