Python 3.6下Pandas链式赋值引发副本警告的问题咨询
解决Pandas的SettingWithCopyWarning问题
这个警告我可太熟悉了!你遇到的是Pandas经典的SettingWithCopyWarning,根源在于你用了链式索引(df['column_1'][条件]这种先取列再切片的写法)——Pandas没法确定你到底是想修改原DataFrame,还是它的一个临时副本,所以抛出警告提醒你。
正确的修改方式
直接用df.loc来同时指定行筛选条件和目标列,这是Pandas官方推荐的安全赋值方式:
df.loc[df['column_2'].str.contains('keyword'), 'column_1'] = df['column_3']
为什么这样有效?
.loc的第一个参数是行的筛选条件(这里就是column_2包含'keyword'的行),第二个参数是要修改的列名(column_1)。- 这种写法明确告诉Pandas:我要修改原DataFrame中符合条件的行的
column_1列,不会产生副本歧义,警告自然就消失了。
额外提醒
如果你的df本身是从另一个DataFrame切片得到的副本(比如之前写过df = other_df[['column_1','column_2','column_3']]),那最好先显式复制一份:
df = other_df[['column_1','column_2','column_3']].copy()
再执行上面的.loc赋值操作,这样能彻底避免副本相关的警告问题。
内容的提问来源于stack exchange,提问作者Bill Armstrong
相关产品推荐
相关产品推荐

