我想修改DataFrame中某列的某些值。目前我有一个视图从选择通过我的原始df
的多索引(和修改确实改变df
)。从MultiIndex DataFrame分配新值以切片
下面是一个例子:
In [1]: arrays = [np.array(['bar', 'bar', 'baz', 'qux', 'qux', 'bar']),
np.array(['one', 'two', 'one', 'one', 'two', 'one']),
np.arange(0, 6, 1)]
In [2]: df = pd.DataFrame(randn(6, 3), index=arrays, columns=['A', 'B', 'C'])
In [3]: df
A B C
bar one 0 -0.088671 1.902021 -0.540959
two 1 0.782919 -0.733581 -0.824522
baz one 2 -0.827128 -0.849712 0.072431
qux one 3 -0.328493 1.456945 0.587793
two 4 -1.466625 0.720638 0.976438
bar one 5 -0.456558 1.163404 0.464295
我尝试修改的df
片为标量值:
In [4]: df.ix['bar', 'two', :]['A']
Out[4]:
1 0.782919
Name: A, dtype: float64
In [5]: df.ix['bar', 'two', :]['A'] = 9999
# df is unchanged
我真的想在列修改几个值(和自索引返回一个向量,而不是标量值,我认为这会更有意义):
In [6]: df.ix['bar', 'one', :]['A'] = [999, 888]
# again df remains unchanged
我使用的是熊猫0.11。有没有简单的方法来做到这一点?
目前的解决方案是重新创建一个新的df并修改我想要的值。但它不够高雅,可能会对复杂的数据帧造成很大影响。在我看来,问题应该来自.ix和.loc而不是返回一个视图,而是一个副本。
why -1 vote?你能解释一下吗? – HadiM
+1一个很好的问题,一个令人困惑的问题。唯一我能想到的是,由于标题不是描述性的,因此它被低估了。 (但是谁知道!) –
对不起,但我不是英语母语的人,话题有点复杂,所以很难找到一个好的:-)如果你想给我一个标题,我可以改变当前一。 – HadiM