我想使用将旧代码映射到新代码的字典替换数据帧列中的一些值。
di = dict( { "myVar": {11:0, 204:11} } )
mydata.replace( to_replace = di, inplace = True )
但有些新代码和旧代码是重叠的。当使用数据帧的.replace方法时,我遇到错误
'Replacement not allowed with overlapping keys and values'
我目前的解决方法是手动替换有问题的键,然后将字典应用于其余不重叠的情况。
mydata.loc[ mydata.myVar == 11, "myVar" ] = 0
di = dict( { "myVar": {204:11} } )
mydata.replace( to_replace = di, inplace = True )
有更紧凑的方法吗?
最佳答案
我找到了一个答案here,它将.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
更新:
使用map,原始序列中的每个值都必须映射到新值。如果映射字典不包含原始列的所有值,则未映射的值将映射到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
关于python - 在pandas dataframe上使用.replace()方法时,在字典中重叠键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42425971/