我有一个包含一系列州和一系列国家的数据框。国家系列具有多个缺失值。我有一本我用来清理“州”系列的美国州字典。我想用它说,如果国家在词典中,那么国家应该是美国。
我可以使用映射到美国的国家词典,即AppConfig
然后使用{'AL': 'USA', 'AK': 'USA' ...}
,但我敢肯定有一种更好/更智能/更简单的方法可以做到这一点。
我已经尝试过了:
df['Country']= df['Country'].map(dict)
其中test = df[['State', 'Country']]
for a, b in test.itertuples(index=False):
if a in us_state_abbrev.values():
b = "USA"
elif a in ca_province_abbrev.values():
b = "Canada"
返回:
test.head()
和 State Country
0 MO NaN
1 IA USA
2 MI NaN
3 AB Canada
4 ON Canada
但没有任何变化,尽管if-else语句有效。为什么会这样?
我也尝试过:
us_state_abbrev = {'Alabama': 'AL', 'Alaska': 'AK' ...}
但出现ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。为什么会这样?
答案 0 :(得分:1)
请勿使用in
。您需要isin
和np.where
us_state_abbrev = {'Alabama': 'AL', 'Alaska': 'AK', 'IOWA': 'IA', 'Mississippi': 'MI', 'Missouri': 'MO'}
test['Country'] = np.where(test['State'].isin(us_state_abbrev.values()), "USA", test['Country'])
Out[143]:
State Country
0 MO USA
1 IA USA
2 MI USA
3 AB Canada
4 ON Canada