我的原始数据框= data_df,其中
data_df["country_name"]
列和城市列 data_df["city_name"]
中缺少 427 个国家/地区,除 1 行外,所有行都有城市名称。我有另一个数据框,其中缺少约 261 行的国家和城市名称。我想替换原始数据集中的国家/地区名称的 NaN
值,这些值可在我的新数据帧(261 行)中使用。我怎样才能实现这个目标。
如果 city_name 等于 city,我尝试使用索引和 for 循环,如果匹配则替换
Nan
值,相反,我将更多行附加到我的数据帧中。
for city_index, city_name in enumerate(nan_rows["city_name"]):
country = nan_rows.iloc[city_index]["country_name"]
print(f"City index is {city_index} and City name is {city_name} and county is {country}")
for city in new_country_missing_df["city_name"]:
if city == city_name:
nan_rows.loc[city_index, "country_name"] = country
我的数据框示例: nan_rows 数据框:
country_name city_name
535 NaN Granville
654 NaN Kingston Upon Hull
787 NaN New Waterford
801 NaN Kingstown
new_country_missing_df 数据框:
city_name country
0 Granville France
1 Kingston Upon Hull United Kingdom
2 New Waterford Canada
3 Kingstown Saint Vincent and the Grenadines
4 Nanakuli United States
您可以使用
map
方法:
nan_rows["country_name"] = nan_rows["city_name"].map(
new_country_missing_df.set_index("city_name").country_name
)
事实上,你甚至不需要nan_rows dataframe,你可以直接应用它:
data_df.loc[data_df.country_name.isna(), "country_name"] = data_df.loc[
data_df.country_name.isna(), "city_name"
].map(
new_country_missing_df.set_index("city_name").country_name
)