所以我知道您不能根据此post在pandas数据框架上使用if
语句,否则您将收到此错误:The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
那么如何应用函数多种条件?
我有一个导出CRM数据的数据框,并且包含我需要转换为2个字母的国家/地区代码(美国到美国等)的国家/地区列。
以下是国家/地区列中包含的唯一值列表:
['United States', 'Canada', 'Australia', 'United Kingdom', 'US',
'Germany', 'New Zealand', 'Netherlands', 'Mexico', 'France',
'Ireland', 'Dominican Republic', 'Puerto Rico', 'Taiwan', 'USA',
'1', 'united States', 'United Staes', 'United State', 'usa',
'United Sates', 'United Stated', 'usaa', 'Unite States', 'nv',
'canada', 'Pakistan']
我的解决方案是尝试这样的事情:
def country_codes(country):
if country.str.contains(r'(United Kingdom)'):
return 'GB'
elif country.str.contains(r'(Canada|canada)'):
return 'CA'
elif country.str.contains(r'(Australia)'):
return 'AU'
elif country.str.contains(r'(United|US|USA|State|usa)'):
return 'US'
elif country.str.contains(r'(Germany)'):
return 'DE'
elif country.str.contains(r'(New Zealand)'):
return 'NZ'
elif country.str.contains(r'(Netherlands)'):
return 'NL'
elif country.str.contains(r'(Mexico)'):
return 'MX'
elif country.str.contains(r'(France)'):
return 'FR'
elif country.str.contains(r'(Ireland)'):
return 'IE'
elif country.str.contains(r'(Dominican)'):
return 'DO'
elif country.str.contains(r'(Puerto)'):
return 'PR'
elif country.str.contains(r'(Taiwan)'):
return 'TW'
else:
return country
但是在尝试df.apply(country_codes)
后,我得到了相同的ValueError
。如果在没有正则表达式匹配的情况下更容易实现这一点,我也会对此持开放态度。
答案 0 :(得分:1)
一种有效的方法是创建字典,然后在更新数据帧时迭代字典:
d = {'United Kingdom': 'GB', 'Canada|canada': 'CA',
'Australia': 'AU', 'Untied|US|State|USA': 'US'}
df = pd.DataFrame({'Country': ['US', 'USA', 'United Kingdom', 'canada', 'Australia']})
for k, v in d.items():
df.loc[df['Country'].str.contains(k), 'Code'] = v
print(df)
# Country Code
# 0 US US
# 1 USA US
# 2 United Kingdom GB
# 3 canada CA
# 4 Australia AU