Python 3.x series.replace()有什么问题?

Python 3.x series.replace()有什么问题?,python-3.x,pandas,Python 3.x,Pandas,我试图用其他整数值替换pd.Series中的整数值,如下所示。我正在使用类似dict的替换: ser_list = [pd.Series([65, 1, 0, 0, 1]), pd.Series([0, 62, 1, 1, 0])] for ser in ser_list: ser.replace({65: 10, 62: 20}) 我期待着结果: [10, 1, 0, 0, 1] # first series in the list [0, 20, 1, 1, 0] # second

我试图用其他整数值替换pd.Series中的整数值,如下所示。我正在使用类似dict的替换:

ser_list = [pd.Series([65, 1, 0, 0, 1]), pd.Series([0, 62, 1, 1, 0])]
for ser in ser_list:
    ser.replace({65: 10, 62: 20})
我期待着结果:

[10, 1, 0, 0, 1] # first series in the list
[0, 20, 1, 1, 0] # second series in the list
其中,在第一个系列中,65应替换为10,在第二个系列中,62应替换为20


然而,在这段代码中,它返回的是原始系列,没有任何替换。有什么线索吗?

有可能,通过
inplace=True

for ser in ser_list:
    ser.replace({65: 10, 62: 20}, inplace=True)
    
print (ser_list)
[0    10
1     1
2     0
3     0
4     1
dtype: int64, 0     0
1    20
2     1
3     1
4     0
dtype: int64]
但不推荐,如评论中提到的@Dan-:

熊猫核心团队不鼓励使用inplace参数,最终它将被弃用(这意味着“计划从库中删除”)。原因如下:

inplace在方法链中不起作用。
使用inplace通常不会阻止创建副本,这与名称的含义相反。
删除inplace选项将降低pandas代码库的复杂性

或在列表理解中指定给同一变量:

ser_list = [ser.replace({65: 10, 62: 20}) for ser in ser_list]
循环解决方案可以附加到新列表并重新分配:

out = []
for ser in ser_list:
    ser = ser.replace({65: 10, 62: 20})
    out.append(ser)
    
print (out)
[0    10
1     1
2     0
3     0
4     1
dtype: int64, 0     0
1    20
2     1
3     1
4     0
dtype: int64]

可以通过
inplace=True

for ser in ser_list:
    ser.replace({65: 10, 62: 20}, inplace=True)
    
print (ser_list)
[0    10
1     1
2     0
3     0
4     1
dtype: int64, 0     0
1    20
2     1
3     1
4     0
dtype: int64]
但不推荐,如评论中提到的@Dan-:

熊猫核心团队不鼓励使用inplace参数,最终它将被弃用(这意味着“计划从库中删除”)。原因如下:

inplace在方法链中不起作用。
使用inplace通常不会阻止创建副本,这与名称的含义相反。
删除inplace选项将降低pandas代码库的复杂性

或在列表理解中指定给同一变量:

ser_list = [ser.replace({65: 10, 62: 20}) for ser in ser_list]
循环解决方案可以附加到新列表并重新分配:

out = []
for ser in ser_list:
    ser = ser.replace({65: 10, 62: 20})
    out.append(ser)
    
print (out)
[0    10
1     1
2     0
3     0
4     1
dtype: int64, 0     0
1    20
2     1
3     1
4     0
dtype: int64]

我们还可以将
Series.map
fillna
列表理解一起使用:

new = [ser.map({65: 10, 62: 20}).fillna(ser) for ser in ser_list]

print(new)
[0    10.0
1     1.0
2     0.0
3     0.0
4     1.0
dtype: float64, 0     0.0
1    20.0
2     1.0
3     1.0
4     0.0
dtype: float64]

我们还可以将
Series.map
fillna
列表理解一起使用:

new = [ser.map({65: 10, 62: 20}).fillna(ser) for ser in ser_list]

print(new)
[0    10.0
1     1.0
2     0.0
3     0.0
4     1.0
dtype: float64, 0     0.0
1    20.0
2     1.0
3     1.0
4     0.0
dtype: float64]