如何仅将新索引附加到具有HDFS存储的表中

时间:2017-10-23 16:46:14

标签: python pandas hdfs pytables

我将遍历许多数据框以附加到hdfs存储中的表。指数将相互重叠。我想只附加索引中尚未存储的行。

MCVE

考虑我的数据框d1d2

d1 = pd.DataFrame.from_dict(
    {('a', 'x'): {'col': 1}, ('a', 'y'): {'col': 1}}, orient='index')
d2 = pd.DataFrame.from_dict(
    {('b', 'x'): {'col': 2}, ('a', 'y'): {'col': 2}}, orient='index')

print(d1, '\n\n', d2)

     col
a x    1
  y    1 

      col
a y    2
b x    2

我想完成与以下相同的逻辑:

d1.append(d2.loc[d2.index.difference(d1.index)])

     col
a x    1
  y    1
b x    2

但我希望将其附加到hdfs商店。

我尝试过什么

d1.to_hdf('test.h5', 'mytable', format='table')
d2.to_hdf('test.h5', 'mytable', append=True)

pd.read_hdf('test.h5', 'mytable')

     col
a x    1
  y    1
  y    2
b x    2

您可以看到索引('a', 'y')与两个不同的值重复。我假设有一种方法可以在将新行添加到表之前检查表中的索引值。

1 个答案:

答案 0 :(得分:1)

首先初始化商店可能会有所帮助。然后,您应该能够将数据框分配给mytable并使用它,就像您在仅限数据框的示例中一样。

store = pd.HDFStore('test.h5')

store['mytable'] = d1
store['mytable'].append(d2.loc[d2.index.difference(store['mytable'].index)])

     col
a x    1
  y    1
b x    2