我有一个 pandas Series,其值为 True、False 或 None.
import pandas as pd
s = pd.Series([True, True, False, False, None, None])
我想分别替换成1、-1或0。
但是当我运行 .replace 命令时,我发现结果取决于我定义字典的方式。例如,如果我定义了以下两个具有相同键和值的字典,它们的行为应该相同:
dict_1 = {None: 0, False: -1, True: 1}
dict_2 = {False: -1, None: 0, True: 1}
然而,他们没有!
s.replace(dict_1)
输出
0 1
1 1
2 -1
3 -1
4 -1
5 -1
和
s.replace(dict_2)
返回
0 1
1 1
2 -1
3 -1
4 0
5 0
这是什么原因?我怎样才能确保我得到我想要的行为(第二种情况,比如 dict_2)?
[已编辑:python 3.6.1、pandas 0.21.1 中存在问题。根据 – @Andrey Berenda 的说法,问题不会在 python 3.7 和 pandas 0.25 中重现]
请您参考如下方法:
使用Series.map :
mapping = {None: 0, False: -1, True: 1}
s.map(mapping)
0 1
1 1
2 -1
3 -1
4 0
5 0
dtype: int64
或者使用替换,也可以:
s.replace({True: 1, False: -1, None: 0})
0 1
1 1
2 -1
3 -1
4 0
5 0
dtype: int64
