python - 如何在 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 来避免复制数据框,因为它很大。任何关于如何实现这一点的想法都将不胜感激。
解决方案
当您选择要替换的列时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}
推荐阅读
- arrays - 连接从 Swift 中的数组返回的值
- unity3d - Unity Shader Graph中Sample Texture2dArray中Index的值应该是多少?
- python - 使用 2D 数组沿 1 轴索引 3D 数组
- vue.js - 如何使用 Vue.js 的路由器将状态和事件处理程序作为道具传递给子组件?
- java - Java是否使用指针按索引访问数组?
- angular - 在订阅的第一次发布时执行代码,同时仍然能够执行多次
- c++ - 作为类模板成员的函数模板
- php - PHP 提取器 foreach
- vb.net - 在文本框中显示日期和时间
- node.js - 错误:在将 fstream 与 rollup.js 捆绑时,已经声明了标识符“Reader”