Python 在dataframe上使用.replace()方法时字典中的键重叠

Python 在dataframe上使用.replace()方法时字典中的键重叠,python,pandas,Python,Pandas,我想使用将旧代码映射到新代码的字典替换数据帧列中的一些值 di = dict( { "myVar": {11:0, 204:11} } ) mydata.replace( to_replace = di, inplace = True ) 但一些新代码和旧代码重叠。使用数据帧的.replace方法时,我遇到错误“不允许使用重叠键和值替换” 我目前的解决方法是手动替换有问题的键,然后将字典应用于剩余的非重叠情况 mydata.loc[ mydata.myVar == 11, "myVar" ]

我想使用将旧代码映射到新代码的字典替换数据帧列中的一些值

di = dict( { "myVar": {11:0, 204:11} } )
mydata.replace( to_replace = di, inplace = True )
但一些新代码和旧代码重叠。使用数据帧的.replace方法时,我遇到错误
“不允许使用重叠键和值替换”

我目前的解决方法是手动替换有问题的键,然后将字典应用于剩余的非重叠情况

mydata.loc[ mydata.myVar == 11, "myVar" ] = 0 
di = dict( { "myVar": {204:11} } )
mydata.replace( to_replace = di, inplace = True )
有没有更紧凑的方法来实现这一点

我找到了一个答案,该答案在一个系列中使用.map方法并结合字典。下面是一个使用重叠键和值重新编码字典的示例

import pandas as pd
>>> df = pd.DataFrame( [1,2,3,4,1], columns = ['Var'] )
>>> df
   Var
0    1
1    2
2    3
3    4
4    1
>>> dict = {1:2, 2:3, 3:1, 4:3}
>>> df.Var.map( dict )
0    2
1    3
2    1
3    3
4    2
Name: Var, dtype: int64
更新:

使用映射,原始序列中的每个值都必须映射到新值。如果映射字典不包含原始列的所有值,则未映射的值将映射到NaN

>>> df = pd.DataFrame( [1,2,3,4,1], columns = ['Var'] )
>>> dict = {1:2, 2:3, 3:1}
>>> df.Var.map( dict )
0    2.0
1    3.0
2    1.0
3    NaN
4    2.0
Name: Var, dtype: float64

我最近遇到了同样的问题。pandas的replace方法不能被欺骗以实现所需的行为,因为它会依次替换您提供的值。因此,它可能会替换已替换的值。因此,您会收到替换错误消息。您可能正在寻找一种真正的重新编码方法,类似于SPSS中的重新编码。目前,我不认为有什么内置方法可以做到这一点。我在一个系列中使用.map方法找到了答案。到目前为止,它似乎运作良好。我刚刚发布了一个答案。