Python 2.7 替换多索引数据帧中的列值
我想根据数据帧中的第一个索引值进行条件替换。如果我有一个数据帧,例如:Python 2.7 替换多索引数据帧中的列值,python-2.7,pandas,multi-index,Python 2.7,Pandas,Multi Index,我想根据数据帧中的第一个索引值进行条件替换。如果我有一个数据帧,例如: from pandas import * arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] tuples = zip(*arrays) index = MultiIndex.from_tuples(tu
from pandas import *
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = zip(*arrays)
index = MultiIndex.from_tuples(tuples, names=['first','second'])
data = DataFrame(randn(8,2),index=index,columns=['c1','c2'])
我认为我应该能够通过以下方式替换列中的值:
data.ix['bar']['c1'] = -999
但这将返回原始数据帧,保持不变。有人能解释一下应该怎么做,以及为什么我目前的方法不起作用吗 也许是这样:
data.c1[ 'bar' ] = -999
或
我猜在这里data.ix['bar']['c1']
返回的是一个副本,而不是视图。请参见以下内容:
data.c1[ 'bar' ] = -999
或
我猜在这里
data.ix['bar']['c1']
返回的是一个副本,而不是视图。请参见您可以使用.loc
:
>>> data.loc["bar", "c1"]
second
one 0.369406
two 0.691445
Name: c1, dtype: float64
>>> data.loc["bar", "c1"] = -999
>>> data
c1 c2
first second
bar one -999.000000 0.302155
two -999.000000 -1.260789
baz one 0.103455 -0.556967
two -1.600112 0.491787
foo one 0.779901 -0.885565
two -1.041722 -0.570302
qux one -1.152093 -1.767028
two -0.364624 -0.302240
[8 rows x 2 columns]
您可以使用
.loc
:
>>> data.loc["bar", "c1"]
second
one 0.369406
two 0.691445
Name: c1, dtype: float64
>>> data.loc["bar", "c1"] = -999
>>> data
c1 c2
first second
bar one -999.000000 0.302155
two -999.000000 -1.260789
baz one 0.103455 -0.556967
two -1.600112 0.491787
foo one 0.779901 -0.885565
two -1.041722 -0.570302
qux one -1.152093 -1.767028
two -0.364624 -0.302240
[8 rows x 2 columns]
你用错了符号。试一试
data.ix['bar','c1'] = -999
索引的第一个元素引用行,第二个元素引用列。请参阅。您使用了错误的符号。试一试
data.ix['bar','c1'] = -999
索引的第一个元素引用行,第二个元素引用列。请参阅。对于缺少的数据,您可能更喜欢使用NaN。@AndyHayden-这是真的,我可能会使用NaN。我只是在这里选择了-999作为示例。您可能更喜欢使用NaN来表示缺少的数据。@AndyHayden-True,我可能会使用NaN。我只是选择了-999作为例子。很有趣,谢谢你的参考。我从来不知道。很有趣,谢谢你的推荐。我从来不知道,谢谢。我喜欢.ix,因为它比.loc更一般。再次感谢汉克斯。我喜欢.ix,因为它比.loc更一般。再次感谢