如何有条件地更改 pandas 系列中的值?

How to conditionally change values in pandas series?

我正在尝试对使用其他三个数据帧连接的数据帧进行一些基本数据分析。正如您想象的那样,合并后某些数据框列中有 NaN 值。所有单独的数据框都包含大部分相同的标题,但来自三个不同的年份(2017、2018、2019)

我感兴趣的数据涉及 2 列:

  1. 一栏包含世界各国的名称('COUNTRY")

  2. 一个名为 "REGION" 的列(它描述了一个国家/地区所在的地理位置,例如 "Sub-Sarahan Africa"、"Latin America" 等)。

由于国家和地区列不会改变(即它们必须始终对应),我认为可能有一种方法可以更改 df.REGION 列行中的 NaN 值以匹配相应的国家在他们各自的行中。我希望将其永久更改为 df。

我尝试过使用数据帧映射,但未能成功。所以我尝试了字典和 for 循环方法(这似乎也是错误的方法)。但这是我在下面尝试的代码。剧透....它没有用。

dictionary = {'Belize':'Latin America and Caribbean',
              'Namibia':'Sub-Saharan Africa', 
              'Puerto Rico':'Latin America and Caribbean',
              'Somalia':'Sub-Saharan Africa', 
              'Somaliland Region':"Sub-Saharan Africa",
               'South Sudan':'Sub-Saharan Africa'}

for i, row in df.iterrows():
    country = df.COUNTRY
    region = df.REGION
    for key in dictionary:
        if country in dictionary:
            df.REGION = dictionary[d]

上面的字典以国家/地区名称作为键,以地区作为值。

有谁知道使用某种映射函数来填充 REGION 列中与上述字典中的国家/地区名称相对应的缺失 (NaN) 值(即区域名称)的方法?

感谢任何帮助。

提前谢谢大家

使用replace很简单:

df = pd.DataFrame({'Country': ['Namibia', 'Belize']})

df['Region'] = df.Country.replace(dictionary)

结果:

   Country                       Region
0  Namibia           Sub-Saharan Africa
1   Belize  Latin America and Caribbean

您可以使用 map 函数并替换 REGION 为 None:

的所有值
df = pd.DataFrame({"COUNTRY": ["Germany", "USA", "Belize"],
               "REGION": ["Europe", "North America", None]})

df.loc[df.REGION.isnull(), "REGION"] = df.loc[df.REGION.isnull()].COUNTRY.map(dictionary)