【发布时间】:2018-01-20 08:28:19
【问题描述】:
考虑以下hdfstore 和数据帧df 和df2
import pandas as pd
store = pd.HDFStore('test.h5')
midx = pd.MultiIndex.from_product([range(2), list('XYZ')], names=list('AB'))
df = pd.DataFrame(dict(C=range(6)), midx)
df
C
A B
0 X 0
Y 1
Z 2
1 X 3
Y 4
Z 5
midx2 = pd.MultiIndex.from_product([range(2), list('VWX')], names=list('AB'))
df2 = pd.DataFrame(dict(C=range(6)), midx2)
df2
C
A B
0 V 0
W 1
X 2
1 V 3
W 4
X 5
我想先给商店写df。
store.append('df', df)
store.get('df')
C
A B
0 X 0
Y 1
Z 2
1 X 3
Y 4
Z 5
稍后我将有另一个数据框,我想用它来更新商店。我想覆盖与新数据框中具有相同索引值的行,同时保留旧数据。
当我这样做时
store.append('df', df2)
store.get('df')
C
A B
0 X 0
Y 1
Z 2
1 X 3
Y 4
Z 5
0 V 0
W 1
X 2
1 V 3
W 4
X 5
这根本不是我想要的。请注意(0, 'X') 和(1, 'X') 是重复的。我可以操作组合的数据框并进行覆盖,但我希望处理大量数据,而这是不可行的。
如何更新商店获取?
C
A B
0 V 0
W 1
X 2
Y 1
Z 2
1 V 3
W 4
X 5
Y 4
Z 5
您会看到'A'、'Y' 和 'Z' 的每个级别都是相同的,'V' 和 'W' 是新的,而 'X' 已更新。
这样做的正确方法是什么?
【问题讨论】:
-
您可以使用普通(不是多索引)索引吗?
-
是的……我的真实数据有多重索引,但如果你用单一索引显示一些东西,我很高兴。
-
好的,我需要一些时间来准备演示......
标签: python pandas hdf5 hdfstore