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

一、SettingWithCopyWarning 通常出现在你尝试对 DataFrame 的一个切片进行赋值操作时。Pandas 发出这个警告,是因为它不确定你是否在修改原始数据,还是在操作一个副本,这可能会导致意外的行为。

例如:错误的写法就是没用loc,直接修改:

eachBuildDf['提取层'] = eachBuildDf['户号'].str.extract(r'^(\d{1,2})').astype(float)

解决方法: 你可以使用 .loc 来确保你在原始 DataFrame 上进行修改,而不是在其切片上。具体到你的代码中,你可以这样修改:

# 确保使用 .loc 来避免 SettingWithCopyWarning
eachBuildDf.loc[:, '提取层'] = eachBuildDf['户号'].str.extract(r'^(\d{1,2})').astype(float)

但是在有些情况下还会继续发出警告,例如:

# 通过条件过滤生成切片

filtered_df = eachBuildDf[eachBuildDf['户号'] == '01'] # 尝试在这个切片上进行赋值

filtered_df['提取层'] = filtered_df['户号'].str.extract(r'^(\d{1,2})').astype(float)
这种情况下,filtered_df 可能是副本,而不是视图。因此,修改 filtered_df 可能不会反映到 eachBuildDf 中。这时,Pandas 会发出警告,因为你可能并不清楚你实际上是在修改副本。

为了避免这些问题,确保你对 DataFrame 的所有修改操作都在原始 DataFrame 上进行,或明确创建副本:

df_copy = eachBuildDf.copy()

df_copy['提取层'] = df_copy['户号'].str.extract(r'^(\d{1,2})').astype(float)

以上得分情况去看,一般建议直接创建副本去修改或者新增列
二、FutureWarning警告处理
是提醒你未来版本中 fillna方法的行为可能会发生变化。当前 fillna方法在处理数据类型转换时可能会出现问题,你可以设置 Pandas 的选项来适应未来的行为:

# 设置 Pandas 选项,FutureWarning警告就会消失

pd.set_option('future.no_silent_downcasting', True)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值