更新 我有两个国家名单: 一个来自https://www.countries-ofthe-world.com/world-currencies.html,另一个来自http://www.nationsonline.org/oneworld/country_code_list.htm。这些列表中的某些国家/地区名称不同。我需要将它们合并以获得每个国家/地区名称,ISO3和ISO-4217。要获得完整列表,我需要重命名一些国家/地区。我正在尝试使用常规来查找国家/地区,并使用第二个DataFrame中的值对其进行重命名。
我有两个(国家/地区)列表,格式如下: 我需要的名字
Country_ISO['Country_or_territory'].tail(10)
Out[57]:
237 Russian Federation
238 Vanuatu
239 Venezuela
240 Viet Nam
241 Virgin Islands, US
242 Wallis and Futuna Islands
243 Western Sahara
244 Yemen
245 Zambia
246 Zimbabwe
Name: Country_or_territory, dtype: object
和不同的名称
NotIn.Country_or_territory.tail(10)
Out[61]:
131 Macau
132 Macedonia
148 Pitcairn Islands
153 Svalbard and Jan Mayen
163 Russia
172 South Korea
177 Syria
178 Taiwan
180 Tanzania
193 Vietnam
Name: Country_or_territory, dtype: object
我需要在第一个列表中找到项目( Country_ISO ['Country_or_territory']。tail(10)),这些项目对应于第二个列表中的项目( NotIn.Country_or_territory.tail( 10))并对这些名称做一些事情(重命名)。
我正在尝试使用嵌套for循环:
for itemNotIn in NotIn.Country_or_territory.tail(10):
for item in Country_ISO['Country_or_territory'].tail(10):
Tr = itemNotIn[:3] #This here because I need to compare by the first 3 characters)
t = re.sub(Tr+'\w+', '*****NOT_IN*****', item)
print(t)
但是当我运行它时,我会重复len(NotIn.Country_or_territory.tail(10))。
我找不到办法让它发挥作用。
理想情况下,我会有一个列表:
*****NOT_IN*****
Vanuatu
Venezuela
*****NOT_IN***** Nam
Virgin Islands, US
Wallis and Futuna Islands
Western Sahara
Yemen
Zambia
Zimbabwe
答案 0 :(得分:1)
正如评论者所建议的那样,使用集合可以使用以下代码获得问题的后半部分(即列表之间的差异):
list1 = ['Russia','Vanuatu','Venezuela','Viet Nam','Virgin Islands, 'US',
'Wallis and Futuna Islands','Western Sahara','Yemen','Zambia','Zimbabwe']
list2 = ['Macau','Macedonia','Pitcairn Islands','Svalbard and Jan Mayen',
'Russia','South Korea','Syria','Taiwan','Tanzania','Vietnam']
temp_set1 = set(list1).difference(list2)
print("Not in list2", temp_set1)
temp_set2 = set(list2).difference(list1)
print("Note in list1", temp_set2)
现在,您问题的第一部分实际上建议您希望找到相似之处并更改相似项目。在这种情况下,你可以做
common = list(set(list1).intersection(list2))
In [18]: list(set(list1).intersection(list2))
Out[18]: ['Russia']
def fun(common):
#do something with common
最后,如果您仍希望仅使用前三个字符进行比较,请执行以下操作:
set([x[:3] for x in list1]).difference([x[:3] for x in list2])
In [19]: set([x[:3] for x in list1]).difference([x[:3] for x in list2])
Out[19]: {'US', 'Van', 'Ven', 'Vir', 'Wal', 'Wes', 'Yem', 'Zam', 'Zim'}