Python 根据另一个序列的条件,使用字典替换序列对象中的项
我有一个包含一系列州和国家的数据框。国家/地区系列缺少多个值。我有一本美国各州的字典,我用它来整理各州系列。我想用它来表示,如果国家在字典中,那么国家应该是美国 我可以使用映射到美国的州词典,即Python 根据另一个序列的条件,使用字典替换序列对象中的项,python,pandas,numpy,dictionary,series,Python,Pandas,Numpy,Dictionary,Series,我有一个包含一系列州和国家的数据框。国家/地区系列缺少多个值。我有一本美国各州的字典,我用它来整理各州系列。我想用它来表示,如果国家在字典中,那么国家应该是美国 我可以使用映射到美国的州词典,即{'AL':'USA','AK':'USA'…} 然后使用df['Country']=df['Country'].map(dict)但我相信有更好/更聪明/更简单的方法来实现这一点 我试过这个: test = df[['State', 'Country']] for a, b in test.itertu
{'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
和us_state_abbrev={'Alabama':'AL','Alaska':'AK'…}
尽管if-else语句有效,但没有任何变化。为什么呢
我也试过:
test['Country'] = np.where(test['State'] in us_state_abbrev.values(), "USA", test['Country'])
但我得到了一个ValueError:级数的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。为什么会这样?不要在中使用
。您需要使用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
如果您只有两个选项是“美国”或“加拿大”,因此您可以确保在多个国家/地区中没有出现含糊不清的州缩写,那么使用map()
是非常合适的。至于你的具体语法错误:如果你发布一个复制你的错误的代码的工作示例,你会得到更好的响应,不要让我们猜测你的数据帧中有什么。谢谢@Jewly,但是使用state_abbrev字典,而不是创建一个全新的{state:USA}字典,难道不应该有更简单的方法吗?为了澄清,我将编辑问题以显示test.head()