我有一个包含国家/地区名称的数据框,我想在此框后面附加每个国家/地区的首都的坐标。
我创建了一个具有所有这样格式的坐标的字典:
{'Czech Republic': (14.4212535, 50.0874654), 'Zimbabwe': (31.045686, -17.831773),
'Hungary': (19.0404707, 47.4983815), 'Nigeria': (7.4892974, 9.0643305)}
我有一个数据框,其中一列为“ COUNTRY”,并希望有两个新列“ LAT”,“ LON”用于存储坐标。我尝试将dict直接转换为数据框,但没有按我希望的那样工作。
是否可以创建带有两列“ LAT”,“ LON”的空df,将其与原始df合并,然后进行迭代,检查国家/地区并逐个添加坐标,或者有更好的方法吗?这样做吗?
一个国家可以在df中出现很多次,条目大约有3万,因此恐怕会造成一些开销。我是Pandas的新手,所以我可能会缺少一个可以很好地使用此功能的内置功能。
您是否对解决此问题的最佳方法有任何想法?
预先感谢
答案 0 :(得分:3)
通过索引[0]
和[1]
与map
的索引来选择元组的第一个和第二个值来使用2 dict理解:
d = {'Czech Republic': (14.4212535, 50.0874654), 'Zimbabwe': (31.045686, -17.831773),
'Hungary': (19.0404707, 47.4983815), 'Nigeria': (7.4892974, 9.0643305)}
df = pd.DataFrame({'COUNTRY':['Zimbabwe','Hungary', 'Slovakia']})
df['LAT'] = df['COUNTRY'].map({k:v[0] for k, v in d.items()})
df['LON'] = df['COUNTRY'].map({k:v[1] for k, v in d.items()})
print (df)
COUNTRY LAT LON
0 Zimbabwe 31.045686 -17.831773
1 Hungary 19.040471 47.498382
2 Slovakia NaN NaN
答案 1 :(得分:1)
除了上述解决方案之外,您还可以使用iloc
d = {'Czech Republic': (14.4212535, 50.0874654), 'Zimbabwe': (31.045686, -17.831773), 'Hungary': (19.0404707, 47.4983815), 'Nigeria': (7.4892974, 9.0643305)}
d = pd.DataFrame(d)
print(d)
Czech Republic Zimbabwe Hungary Nigeria
0 14.421254 31.045686 19.040471 7.489297
1 50.087465 -17.831773 47.498382 9.064331
df = pd.DataFrame({'COUNTRY':['Zimbabwe','Hungary', 'Slovakia']})
df['LAT'] = df['COUNTRY'].map(d.iloc[0])
df['LON'] = df['COUNTRY'].map(d.iloc[1])
print(df)
COUNTRY LAT LON
0 Zimbabwe 31.045686 -17.831773
1 Hungary 19.040471 47.498382
2 Slovakia NaN NaN