我想从我的 DataFrame 中的列中修改一些值。目前,我可以通过原始的多索引从选择中查看视图df
(并且修改确实会改变df
)。
这是一个例子:
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 不是返回一个视图而是一个副本。