如何使用布尔索引在Pandas DataFrame的分类列中设置值?

时间:2015-02-25 15:51:10

标签: python pandas

我想根据布尔条件更改分类列的值。

我很确定使用.loc提供的高级索引应该可以实现,如下所示,但是虽然这适用于索引较小的行,但是对于大型索引它会无声地失败,因为您可以通过下面的示例尝试自己。我做错了什么?

import pandas as pd

df = pd.DataFrame(dict(A=np.array(range(0, 200)), B=pd.Categorical(['a']*200, categories=['a', 'b'])))

# Setting a categorical with boolean indexing works fine for small indices
print df.loc[df.A == 5]
df.loc[df.A == 5, 'B'] = 'b'
print df.loc[df.A == 5]

print ""

# ... but fails for large indices
print df.loc[df.A == 150]
df.loc[df.A == 150, 'B'] = 'b'
print df.loc[df.A == 150]

在我的pandas 0.15.1.dev安装时输出(请注意,A == 5正确更新了值,但A == 150则未正确更新):

   A  B
5  5  a
   A  B
5  5  b

       A  B
150  150  a
       A  B
150  150  a

感谢任何关于出错的提示。对我来说这看起来像个错误,但我刚刚开始使用大熊猫,可能会弄错。

1 个答案:

答案 0 :(得分:1)

这是Categorical的setitem impl中的错误,并由此PR here修复。这将是即将发布的0.16.0版本(概率在2周左右)。