向DataFrame添加同值列时遇警告的解决方案咨询
向DataFrame添加值全相同的列及警告处理
你遇到的警告翻译为:
尝试在DataFrame切片的副本上设置值。
请改用.loc[行索引器,列索引器] = 值 的方式。请查看文档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
这个警告的核心原因是你当前操作的dataframe大概率是另一个DataFrame的切片副本,而非原始对象,Pandas无法判断你要修改的是副本还是原始数据,因此抛出提示。
以下是几种解决方法:
- 明确创建副本后操作:如果
dataframe是从其他DataFrame切片而来,先通过.copy()生成独立副本,再添加列:
# 假设之前是这样得到dataframe的 dataframe = original_df[original_df['col'] > 5].copy() # 再添加列 dataframe['size'] = 10
- 使用
assign()方法生成新DataFrame:这个方法会返回包含新列的新DataFrame,不会修改原对象,彻底避免警告:
dataframe = dataframe.assign(size=10)
- 直接操作原始DataFrame(若需求匹配):如果你的目标是给原始DataFrame中特定行添加列,直接在原始对象上通过
loc定位操作:
original_df.loc[original_df['filter_col'] == 'target', 'size'] = 10
如果只是想临时屏蔽警告(不推荐,可能隐藏逻辑问题),可以执行:
import pandas as pd pd.options.mode.chained_assignment = None
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

