这是我的主要数据包含一些数据,它有世界各国在ISO国家代码alpha-2 (意为两个字母符号)。最终,dataframe将与另一个在ISO国家代码alpha-3 (意为三个字母符号)中的世界国家合并。有一些python包可以进行转换,但是应该可以使用简单的参考csv文件来比较和替换数据文件中的数据。
编辑:两个数据中的国家代码并不是相同的顺序(一些缺失/没有人口),这就是为什么我需要迭代并手动挑选每个符号。
因为我是初学者,所以我陷入了代码的制定,无法正确的语法。继续获取: ValueError:只能比较相同标记的Series对象
我试图获取索引位置和值,但是不能将新的系列添加到原始的dataframe。我制作了一个简单的for循环来测试和可视化我想要实现的目标,参见代码。
# notebook magic
%matplotlib inline
# import packages
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import geopandas
# import excel data from files
# note: here the countries are in ISO 3166-1 alpha-2
joblist = pd.read_excel('joblist.xlsx', sheet_name='Joblist', header=1).reset_index(drop=True)
# load iso-countries reference file for conversion
countries = pd.read_csv('iso-countries.csv')
# load the world map dataset and remove Antartica and empty countries
# note: here the countries are in ISO 3166-1 alpha-3
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world = world[(world.pop_est>0) & (world.name!="Antarctica")]
# just for testing, iterate and fetch correct value, THIS fetched value should be appended to main dataframe
for value in world['iso_a3']:
print('* INPUT VALUE *', value)
print('* FETCHED VALUE *', countries['alpha-2'].loc[countries['alpha-3'] == value])
# append new iso alpha-2 value to world dataframe
# THIS IS THE LINE OF CODE I AM STUCK IN
world['iso_a2'] = countries['alpha-2'].where(world['iso_a3'] == countries['alpha-3']) 在我的for循环中,这是我想要实现的一个国家的例子。在"world“dataframe中遍历ISO alpha-3系列,并对每个项目搜索"countries”数据并定位该项所在的行("UKR")。然后,当我得到正确的行时,将alpha-2值("UA")复制到"world“dataframe。
对于循环输出示例:
发布于 2019-01-05 18:11:52
一种方法是将countries DataFrame转换为Series.replace()可以接受的系列。为此,将countries的countries列设置为索引;这将返回一个包含一个索引和一个名为alpha-2的列的DataFrame。将alpha-2列(熊猫系列)传递给world['iso_a3'].replace(),如下所示:
world['iso_a2'] = world['iso_a3'].replace(countries.set_index('alpha-3')['alpha-2'])https://stackoverflow.com/questions/54053618
复制相似问题