gpt4 book ai didi

python - 有没有办法用相应的大陆来标记一个区域? Python

转载 作者:行者123 更新时间:2023-12-01 06:25:20 25 4
gpt4 key购买 nike

我收到了包含多个地区和国家的 csv。我的目标是为每个国家/地区创建一个包含相应大陆的新列。我为每个大陆创建了数组,列出了其中的所有国家/地区。然而,这种方法却让这些地区和城市下落不明。有更好的方法来解决这个问题吗?我在研究中发现的 map 信息都与大陆不对应。以下是我当前/低效的方法。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import psycopg2 as ps

#Part 1
url = 'https://raw.githubusercontent.com/laurenaxon/ding_INFO5502_SPRING2020/master/indicator%20hiv%20estimated%20prevalence%25%2015-49.csv'
df = pd.read_csv(url)

Africa = ('Algeria','Angola','Benin','Botswana','Burkina','Burundi','Cameroon','Cape Verde','Central African Republic','Chad','Comoros','Congo','Congo, Democratic Republic of','Djibouti','Egypt','Equatorial Guinea','Eritrea','Ethiopia','Gabon','Gambia','Ghana','Guinea','Guinea-Bissau','Ivory Coast','Kenya','Lesotho','Liberia','Libya','Madagascar','Malawi','Mali','Mauritania','Mauritius','Morocco','Mozambique','Namibia','Niger','Nigeria','Rwanda','Sao Tome and Principe','Senegal','Seychelles','Sierra Leone','Somalia','South Africa','South Sudan','Sudan','Swaziland','Tanzania','Togo','Tunisia','Uganda','Zambia','Zimbabwe')
Asia = ('Afghanistan','Bahrain','Bangladesh','Bhutan','Brunei','Burma (Myanmar)','Cambodia','China','East Timor','India','Indonesia','Iran','Iraq','Israel','Japan','Jordan','Kazakhstan','Korea, North','Korea, South','Kuwait','Kyrgyzstan','Laos','Lebanon','Malaysia','Maldives','Mongolia','Nepal','Oman','Pakistan','Philippines','Qatar','Russian Federation','Saudi Arabia','Singapore','Sri Lanka','Syria','Tajikistan','Thailand','Turkey','Turkmenistan','United Arab Emirates','Uzbekistan','Vietnam','Yemen')
Europe = ('Albania','Andorra','Armenia','Austria','Azerbaijan','Belarus','Belgium','Bosnia and Herzegovina','Bulgaria','Croatia','Cyprus','Czech Republic','Denmark','Estonia','Finland','France','Georgia','Germany','Greece','Hungary','Iceland','Ireland','Italy','Latvia','Liechtenstein','Lithuania','Luxembourg','Macedonia','Malta','Moldova','Monaco','Montenegro','Netherlands','Norway','Poland','Portugal','Romania','San Marino','Serbia','Slovakia','Slovenia','Spain','Sweden','Switzerland','Ukraine','United Kingdom','Vatican City')
North_America = ('Antigua and Barbuda','Bahamas','Barbados','Belize','Canada','Costa Rica','Cuba','Dominica','Dominican Republic','El Salvador','Grenada','Guatemala','Haiti','Honduras','Jamaica','Mexico','Nicaragua','Panama','Saint Kitts and Nevis','Saint Lucia','Saint Vincent and the Grenadines','Trinidad and Tobago','United States')
South_America = ('Argentina','Bolivia','Brazil','Chile','Colombia','Ecuador','Guyana','Paraguay','Peru','Suriname','Uruguay','Venezuela')
Australia_Oceania = ('Australia','Fiji','Kiribati','Marshall Islands','Micronesia','Nauru','New Zealand','Palau','Papua New Guinea','Samoa','Solomon Islands','Tonga','Tuvalu','Vanuatu')

country = df["Estimated HIV Prevalence% - (Ages 15-49)"]

def GetConti(country):
if country in Africa:
return "Africa"
elif country in Asia:
return "Asia"
elif country in Europe:
return "Europe"
elif country in North_America:
return "North America"
elif country in South_America:
return "South America"
elif country in Australia_Oceania:
return "Australia/Oceania"
else:
return "Other"



df['Continent']=country.apply(GetConti)
df.to_csv('url', sep='\t')


print(df)

最佳答案

要在 O(1) 时间内运行此操作,您需要一个哈希表(字典),其中每个国家/地区都是与其所在大陆对应的键,如下所示:

{
'Algeria': 'Africa',
'Angola': 'Africa',
...

'Afghanistan': 'Asia',
...
}

当然,这写起来相当繁琐,因此您可以使用以下命令将数据转换为这种格式:

class continents:
Africa = ('Algeria','Angola','Benin','Botswana','Burkina','Burundi','Cameroon','Cape Verde','Central African Republic','Chad','Comoros','Congo','Congo, Democratic Republic of','Djibouti','Egypt','Equatorial Guinea','Eritrea','Ethiopia','Gabon','Gambia','Ghana','Guinea','Guinea-Bissau','Ivory Coast','Kenya','Lesotho','Liberia','Libya','Madagascar','Malawi','Mali','Mauritania','Mauritius','Morocco','Mozambique','Namibia','Niger','Nigeria','Rwanda','Sao Tome and Principe', 'Senegal','Seychelles','Sierra Leone','Somalia','South Africa','South Sudan','Sudan','Swaziland','Tanzania','Togo','Tunisia','Uganda','Zambia','Zimbabwe')

Asia = ('Afghanistan','Bahrain','Bangladesh','Bhutan','Brunei','Burma (Myanmar)','Cambodia','China','East Timor','India','Indonesia','Iran','Iraq','Israel','Japan','Jordan','Kazakhstan','Korea, North','Korea, South','Kuwait','Kyrgyzstan','Laos','Lebanon','Malaysia','Maldives','Mongolia','Nepal','Oman','Pakistan','Philippines','Qatar','Russian Federation','Saudi Arabia','Singapore','Sri Lanka','Syria','Tajikistan','Thailand','Turkey','Turkmenistan','United Arab Emirates','Uzbekistan','Vietnam','Yemen')

Europe = ('Albania','Andorra','Armenia','Austria','Azerbaijan','Belarus','Belgium','Bosnia and Herzegovina','Bulgaria','Croatia','Cyprus','Czech Republic','Denmark','Estonia','Finland','France','Georgia','Germany','Greece','Hungary','Iceland','Ireland','Italy','Latvia','Liechtenstein','Lithuania','Luxembourg','Macedonia','Malta','Moldova','Monaco','Montenegro','Netherlands','Norway','Poland','Portugal','Romania','San Marino','Serbia','Slovakia','Slovenia','Spain','Sweden','Switzerland','Ukraine','United Kingdom','Vatican City')

North_America = ('Antigua and Barbuda','Bahamas','Barbados','Belize','Canada','Costa Rica','Cuba','Dominica','Dominican Republic','El Salvador','Grenada','Guatemala','Haiti','Honduras','Jamaica','Mexico','Nicaragua','Panama','Saint Kitts and Nevis','Saint Lucia','Saint Vincent and the Grenadines','Trinidad and Tobago','United States')
South_America = ('Argentina','Bolivia','Brazil','Chile','Colombia','Ecuador','Guyana','Paraguay','Peru','Suriname','Uruguay','Venezuela')
Australia_Oceania = ('Australia','Fiji','Kiribati','Marshall Islands','Micronesia','Nauru','New Zealand','Palau','Papua New Guinea','Samoa','Solomon Islands','Tonga','Tuvalu','Vanuatu')

country_to_continent_map = {}
for name in dir(continents):
if name.startswith('_'): continue

country_set = getattr(continents, name)

for country in country_set:
country_to_continent_map[country] = name

然后将其写入文件中的某个位置:

file = f'''
country_to_continent_map = {str(country_to_continent_map)}
'''
with open('some_file.py', 'w+') as f:
f.write(file)

现在您可以将代码简单化为以下内容:

from some_file import country_to_continent_map

def get_continent(country):
try:
return country_to_continent_map[country]
except KeyError:
return 'Other'

col = 'Estimated HIV Prevalence% - (Ages 15-49)'

country = df[col]
country.apply(get_continent)
print(df.to_csv())

关于python - 有没有办法用相应的大陆来标记一个区域? Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60180998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com