使用pandas数据帧中的iloc函数搜索变量名



我有一个熊猫数据帧,由5000行不同国家和排放数据组成,看起来如下:

国家
peru 2020 1000

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

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

您应该能够通过某个字符串为索引进行选择。例如:

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}]

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

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

(以防您的"country"值有一些使用多个单词的国家名称(

示例:

  • 从英国到联合王国

使用此代码:

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

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

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

完成该代码后,"country"列中的所有唯一值都存储到名为"country_name"的列表变量中

接下来,

使用for进行迭代,使用以下代码按国家名称生成新变量:

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

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

之后,它已经为"country"列中的每个国家名称创建了一个新变量。

希望这能帮助你解决问题。

最新更新