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

时间:2020-05-25 10:32:40

标签: python pandas loops dataframe nan

我正在尝试对使用其他三个数据帧串联而成的数据帧进行一些基本数据分析。可以想象,合并后某些数据框列中存在NaN值。所有单独的数据框都包含大多数相同的标题,但分别来自三个不同的年份(2017、2018、2019)

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

  1. 一列列有世界各国(“ COUNTRY”)名称的列

  2. 一列称为“区域”(REGION)(描述一个国家位于“撒哈拉以南非洲”,“拉丁美洲”等国家/地区的地理位置)。

由于国家和地区列不变(即它们必须始终对应),所以我认为可能有一种方法可以更改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)值(即地区名称)的方法吗?

任何帮助,我们将不胜感激。

提前谢谢大家

2 个答案:

答案 0 :(得分:1)

使用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

答案 1 :(得分:1)

您可以使用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)