我有一个熊猫数据帧,由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"列中的每个国家名称创建了一个新变量。
希望这能帮助你解决问题。