Skip to main content
 首页 » 编程设计

python之带有字典输入的 Pandas "replace"根据字典顺序返回不同的结果(其中字典没有顺序)

2024年08月12日33lyhabc

我有一个 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