我有一个超级奇怪的问题,我花了最后一小时试图解决,但没有成功。更奇怪的是因为我无法在小范围内复制它。 我有一个大型DataFrame(150,000个条目)。我拿出了它的一个子集并进行了一些操作。子集保存为不同的变量x。
x小于df,但其索引与df的范围相同。我现在正尝试将x分配回DataFrame,替换同一列中的值:
rep_Callers['true_vpID'] = x.true_vpID
这会将x中的所有不同值插入到df中的正确位置,但不是保留不在x中的df.true_vpID值,而是用NaN填充它们。所以我尝试了另一种方法:
df.ix[x.index,'true_vpID'] = x.true_vpID
但是df.true_vpID不是在df中的正确位置填充x值,而是填充x的第一个值,只有它!我多次更改了x的第一个值,以确保确实发生了这种情况,事实确实如此。我试图小规模复制它,但它不起作用:
df = DataFrame({'a':ones(5),'b':range(5)})
a b
0 1 0
1 1 1
2 1 2
3 1 3
4 1 4
z =Series([random() for i in range(5)],index = range(5))
0 0.812561
1 0.862109
2 0.031268
3 0.575634
4 0.760752
df.ix[z.index[[1,3]],'b'] = z[[1,3]]
a b
0 1 0.000000
1 1 0.812561
2 1 2.000000
3 1 0.575634
4 1 4.000000
5 1 5.000000
我真的尝试过这一切,需要一些新的建议......
答案 0 :(得分:1)
尝试使用df.update(updated_df_or_series)
同样使用一个简单示例,您可以通过执行索引查询并修改生成的对象来修改DataFrame。
df_1
a b
0 1 0
1 1 1
2 1 2
3 1 3
4 1 4
df_2 = df_1.ix[3:5]
df_2.b = df_2.b + 2
df_2
a b
3 1 5
4 1 6
df_1
a b
0 1 0
1 1 1
2 1 2
3 1 5
4 1 6