【问题标题】:How to conditionally change values in pandas series?如何有条件地更改熊猫系列中的值?
【发布时间】:2020-09-11 23:37:17
【问题描述】:

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

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

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

  2. 名为“地区”的列(描述了一个国家的地理位置,例如“撒拉罕以南非洲”、“拉丁美洲”等)。

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

感谢所有帮助。

提前谢谢大家

【问题讨论】:

  • 请分享您的数据框样本df

标签: python pandas loops dataframe nan


【解决方案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)

【讨论】:

  • 非常酷的地图功能使用。我肯定会将此添加到我的技术中。谢谢
【解决方案2】:

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

【讨论】:

  • 谢谢。它就像一个魅力。非常简单的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2021-09-03
  • 2020-04-23
相关资源
最近更新 更多