根据其他系列的条件,使用字典替换系列对象中的项目

时间:2019-10-04 21:45:44

标签: python pandas numpy dictionary series

我有一个包含一系列州和一系列国家的数据框。国家系列具有多个缺失值。我有一本我用来清理“州”系列的美国州字典。我想用它说,如果国家在词典中,那么国家应该是美国。

我可以使用映射到美国的国家词典,即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()。为什么会这样?

1 个答案:

答案 0 :(得分:1)

请勿使用in。您需要isinnp.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