如何仅将新索引附加到具有 HDFS 存储的 table
How do I append only the new indices to a table with an HDFS store
我将遍历许多数据帧以附加到 hdfs 存储中的 table。索引将相互重叠。我只想附加存储中尚未包含索引的行。
MCVE
考虑我的数据框 d1
和 d2
:
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')
与两个不同的值重复。我假设有一种方法可以在将新行附加到 table.
之前检查 table 中的索引值
首先初始化商店可能会有所帮助。然后,您应该能够将数据框分配给 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
我将遍历许多数据帧以附加到 hdfs 存储中的 table。索引将相互重叠。我只想附加存储中尚未包含索引的行。
MCVE
考虑我的数据框 d1
和 d2
:
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')
与两个不同的值重复。我假设有一种方法可以在将新行附加到 table.
首先初始化商店可能会有所帮助。然后,您应该能够将数据框分配给 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