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

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

我试图从一个数据框中做一些基本的数据分析,这个数据框是用其他三个数据框合并而成的。正如你可以想象的那样,在合并后的一些数据框列中存在NaN值。所有单独的数据框都包含了大部分相同的标题,但却是来自三个不同的年份(2017,2018,2019)。

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

  1. 一栏是世界各地的国家名称("COUNTRY")

  2. 一栏称为 "区域"(描述一个国家所处的地理位置,例如:"撒哈拉以南非洲"、"拉丁美洲 "等)。"撒哈拉以南非洲","拉丁美洲 "等)。)

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

我曾尝试使用数据框架映射,但无法成功。所以我尝试了一个字典和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)值(即地区名称)?

任何和所有的帮助是感激的。

先谢谢你们

python pandas loops dataframe nan
2个回答
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)

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