替换我的 data_df["country_name"] 列中的 NaN 值

问题描述 投票:0回答:1

我的原始数据框= 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
python pandas data-cleaning
1个回答
0
投票

您可以使用

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
)
© www.soinside.com 2019 - 2024. All rights reserved.