Pandas按条件插值报SettingWithCopyWarning且缺失值未填充如何解决
问题产生原因
df.loc[df['location']=='a']取出的是原DataFrame的切片,pandas无法明确该切片是原数据的视图还是临时副本时,对切片使用inplace=True操作,实际修改的是临时副本,不会对原df产生影响,因此会抛出SettingWithCopyWarning告警,且原数据的缺失值不会被填充。
正确实现方案
方案1:显式赋值(适合仅单个分组插值的场景)
避免使用inplace参数,将插值后的结果直接赋值回原df的对应位置即可:
df.loc[df['location']=='a', 'temp'] = df.loc[df['location']=='a', 'temp'].interpolate(method='linear')
方案2:分组批量处理(适合多分组需要配置不同插值规则的场景)
通过groupby结合transform实现按分组条件处理,扩展性更强:
df['temp'] = df.groupby('location')['temp'].transform( lambda x: x.interpolate(method='linear') if x.name == 'a' else x )
运行上述任意代码后,即可得到预期结果:
location temp 0 a 11.6 1 a 12.2 2 a 12.3 3 a 12.4 4 a 12.9 5 b 27.9 6 b 27.6 7 b NaN 8 b 27.2 9 b 26.8
内容的提问来源于stack exchange,提问作者Muhammad Ghazy
相关产品推荐
相关产品推荐

