【问题标题】:Search for variable name using iloc function in pandas dataframe在 pandas 数据框中使用 iloc 函数搜索变量名
【发布时间】:2022-01-18 00:39:08
【问题描述】:

我有一个包含 5000 行不同国家和排放数据的 pandas 数据框,如下所示:

country year emissions
peru 2020 1000
2019 900
2018 800

国家标签是一个索引。

例如。 df = emission.loc[['peru']]

会给我一个新的数据框,其中仅包含附加到秘鲁的排放数据。 我的目标是使用变量名而不是“peru”,并将特定国家/地区的排放数据存储到新的数据框中。

我搜索的是与以下代码相同的代码:

country = 'zanzibar'

df = emissions.loc[[{country}]]

据我所知,问题出在 iloc 函数不接受变量作为输入。有什么办法可以规避这个问题吗?

换句话说,我希望能够基于与我的emission.index()all 中的一个国家/地区匹配的变量创建一个包含国家特定排放数据的新数据框,而无需更改给定变量以外的任何内容。

一种方法可能是迭代或以某种方式创建一个函数? 提前感谢您的帮助。

【问题讨论】:

  • 你可以使用这个:country = 'zanzibar' df = emissions.loc[[country]]
  • 我认为您混淆了lociloc。尝试使用df = emissions.loc[[country]],假设国家名称是原始数据框的索引,它应该可以工作。
  • emissions.loc[country] 也可以使用
  • 非常感谢各位的帮助。我发现我有一个拼写错误,从一开始就让我走错了方向,现在就像一个魅力。将这个项目称为今天的退出可能是明智的:)

标签: python pandas dataframe function loops


【解决方案1】:

一种不使用国家/地区名称作为索引的替代方法:

emissions = pd.DataFrame({'Country' : ['Peru', 'Peru', 'Peru', 'Chile', 'Chile', 'Chile'], "Year" : [2021,2020,2019,2021,2020,2019], 'Emissions' : [100,200,400,300,200,100]})
country = 'Peru'

然后过滤:

df = emissions[emissions.Country == country]

df = emissions.loc[emissions.Country == country]

给予:

   Country  Year  Emissions
0  Peru     2021  100
1  Peru     2020  200
2  Peru     2019  400

【讨论】:

    【解决方案2】:

    您应该能够为您的索引选择某个字符串。例如:

    df = pd.DataFrame({'a':[1,2,3,4]}, index=['Peru','Peru','zanzibar','zanzibar'])
    country = 'zanzibar'
    df.loc[{country}]
    

    这将返回:

              a
    zanzibar  3
    zanzibar  4
    

    在您的情况下,删除一组方括号应该可行:

    country = 'zanzibar'
    df = emissions.loc[{country}]
    

    【讨论】:

      【解决方案3】:

      我不知道这个解决方案是否与您的问题相同。在这种情况下,我将给出将国家名称变为变量的解决方案

      但是,因为变量名不能用空格(“”)字符命名,所以您必须将空格字符替换为下划线(“_”)字符。

      (以防万一您的“国家”值有一些使用多个单词的国家/地区名称)

      例子:

      • 英国到 United_Kingdom

      通过使用此代码:

      df['country'] = df['country'].replace(' ', '_', regex=True)
      

      因此,在您的国家/地区名称更改为新格式后,您可以使用 .unique() 将所有国家/地区名称从数据框中获取到一个列表中,然后您可以通过以下代码将其存储到一个新变量中:

      country_name = df['country'].unique()
      

      执行该代码后,“国家”列中的所有唯一值都存储到名为“国家名称”的列表变量中

      接下来,

      使用for 进行迭代以使用此代码按国家/地区名称生成新变量:

      for i in country_name:
          locals()[i] = df[df['country']=="%s" %(i)]
      

      所以,locals() 用于将字符串格式转换为非字符串格式(因为在 'country_name' 列表中以字符串格式填充国家名称),df[df['country']=="%s" %(i)] 用于按条件对数据框进行子集化country = 'country_name' 中的每个唯一值。

      之后,它已经为“国家”列中的每个国家/地区名称创建了一个新变量。

      希望这可以帮助您解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-01
        • 2018-12-24
        • 2017-12-28
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 2018-02-09
        • 1970-01-01
        相关资源
        最近更新 更多