【发布时间】:2013-05-25 21:23:22
【问题描述】:
我想修改 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 不是返回视图而是返回副本。
【问题讨论】:
-
为什么是-1票?你至少能解释一下吗?
-
+1 一个很好的问题,一个令人困惑的问题。我唯一能想到的是因为标题不具描述性而被否决了? (但谁知道呢!)
-
抱歉标题,但我不是英语母语人士,而且主题有点复杂,所以很难找到一个好的 :-) 如果你想给我一个标题,我可以更改当前一个。
-
我对其进行了调整,但我不会担心这样的反对票。快乐熊猫。
-
感谢您的调整。更加干净和精确:-)
标签: python pandas multi-index dataframe