首页 > 解决方案 > 如何在 inplace = True 的选定列上应用 pandas.DataFrame.replace?

问题描述

import pandas as pd

df = pd.DataFrame({
    'col1':[99,99,99],
    'col2':[4,5,6],
    'col3':[7,None,9]
})

col_list = ['col1','col2']
df[col_list].replace(99,0,inplace=True)

这会生成一个警告并保持数据框不变。

SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

我希望能够对用户指定的列的子集应用替换方法。我还想使用 inplace = True 来避免复制数据框,因为它很大。任何关于如何实现这一点的想法都将不胜感激。

标签: pythonpandas

解决方案


当您选择要替换的列时df[col_list],将创建数据框的切片(副本)。副本已更新,但从未写回原始数据帧。

您应该一次替换一列或使用嵌套字典映射:

df.replace(to_replace={'col1' : {99 : 0}, 'col2' : {99 : 0}}, 
           inplace=True)

to_replace可以自动生成嵌套字典:

d = {col : {99:0} for col in col_list}

推荐阅读