我正在尝试使用set data type列扩充现有数据框。我正在迭代数据帧的行并添加到每个集合,但是更新正在应用于每一行,即
>>> df = pd.DataFrame()
>>> df['foo'] = [set()] * 2
>>> df
foo
0 {}
1 {}
>>> df.ix[0, 'foo'].update([1, 2, 3])
>>> df
foo
0 {1, 2, 3}
1 {1, 2, 3}
有谁知道为什么会发生这种情况和/或使用集合的替代机制?
答案 0 :(得分:0)
我认为您可以使用loc
:
df = pd.DataFrame()
df['foo'] = [set()] * 2
df.loc[0, 'foo'] = set([1, 2, 3])
print (df)
foo
0 {1, 2, 3}
1 {}
此外,它适用于ix
,但在下一版pandas中已弃用:
df.ix[0, 'foo'] = set([1, 2, 3])
print (df)
foo
0 {1, 2, 3}
1 {}
警告 :pandas并不真正支持非标量条目,因此您将面临意外错误的风险。尽管如此,有时它仍然有用,但实际上我过去曾被一些人咬过。
答案 1 :(得分:0)
发生这种情况的原因是因为您在两个索引处使用了相同的set实例副本:
df['foo'] = [set()] * 2
因此,当您尝试更新时,会在两个集中添加值。
而是创建一个不同的实例:
df['foo'] = [set() for _ in range(2)]