使用pandas read_csv()方法时触发SettingWithCopyWarning问题求助
Pandas read_csv 触发 SettingWithCopyWarning 问题解决
告警含义
SettingWithCopyWarning 是pandas的内置安全告警,含义是程序正在对某份DataFrame切片的副本执行赋值操作,该修改仅对副本生效,不会同步到原始DataFrame,如果是误操作会导致后续数据处理结果不符合预期。
本场景告警触发原因
你观察到仅加载当前CSV文件时触发告警,说明问题和文件本身的内容、格式直接相关,不属于你编写的读取代码的逻辑问题:
- 当前CSV文件存在不符合标准格式的内容:比如表头列数和实际数据行的列数不匹配、部分行尾多余分隔符、存在需要特殊转换的异常值,pandas的Python解析引擎在处理这类异常内容时,内部会执行临时切片赋值操作,触发了该告警
- 其他文件格式符合标准,pandas解析时没有内部赋值操作,所以不会抛出告警
修复方案
你可以按以下优先级尝试解决:
- 临时关闭告警屏蔽内部触发的提示
如果确认后续自己的代码不会出现链式赋值问题,或者只是要屏蔽读取阶段的内部告警,可以在调用read_csv前后修改pandas配置:
print("Test 1.1.2") # 临时关闭链式赋值告警 pd.set_option('mode.chained_assignment', None) df = pd.read_csv(r''+file+'', sep=";", engine='python') # 恢复告警,避免漏过后续自己代码的问题 pd.set_option('mode.chained_assignment', 'warn') print("Test 1.1.3")
- 调整读取参数适配文件格式
你可以给read_csv添加适配参数,从根源避免pandas内部触发告警:
- 没有特殊解析需求的话,把
engine='python'改成engine='c',C解析引擎效率更高,处理异常格式时的内部逻辑也很少触发该告警 - 添加
on_bad_lines='skip'参数,直接跳过格式异常的行 - 显式给所有列指定
dtype,避免pandas自动推断数据类型时的内部操作
- 修复CSV文件内容
手动打开当前CSV文件,排查是否存在格式异常的行,修复后再读取即可完全消除告警。
内容的提问来源于stack exchange,提问作者Alexander Weixelbaumer
相关产品推荐
相关产品推荐

