如何基于同类前置有效值填充缺失值?现有代码误全量替换NaN求助
问题解决:精准填充城市对应的缺失国家值
原始数据
city state country Continent Saint-Denis NaN France Europe Saint-Denis NaN NaN Europe Saint-Denis NaN NaN Europe Kinshasa NaN NaN Africa Kinshasa NaN NaN Africa
问题代码的错误原因
你写的循环代码里,df.country = 'France'是给整个列赋值,不是只修改当前符合条件的行。只要循环里触发一次if判断,所有行的country都会被改成France,自然会把其他城市的缺失值也覆盖了。
精准修复方案
1. 针对单个城市的精准修改
用布尔索引定位目标行,只修改这些行的country:
import pandas as pd # 定位城市为Saint-Denis且country为空的行,赋值为France df.loc[(df['city'] == 'Saint-Denis') & (df['country'].isna()), 'country'] = 'France'
2. 多城市批量填充(更通用)
如果有多个城市需要匹配国家,先做映射字典,再批量填充:
# 定义城市与对应国家的映射关系 city_country_map = { 'Saint-Denis': 'France', 'Kinshasa': 'Democratic Republic of the Congo' } # 用映射填充缺失的country值,仅对有映射的城市生效 df['country'] = df['country'].fillna(df['city'].map(city_country_map))
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

