【发布时间】:2020-02-03 05:03:27
【问题描述】:
我有一个包含一系列州和一系列国家的数据框。 Country 系列有多个缺失值。我有一本美国各州词典,我用来清理美国系列。我想用它来表示,如果字典中有国家,那么国家应该是美国。
我可以使用映射到美国的州字典,即{'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()。这是为什么呢?
【问题讨论】:
-
如果您仅有的两个选项是“美国”或“加拿大”,那么您可以确定没有出现在多个国家/地区的模棱两可的州缩写,那么使用
map()是非常合适的。至于您的特定语法错误:如果您发布一个重现您的错误的代码的工作示例,您会得到更好的响应,不要让我们猜测您的数据框中有什么。 -
谢谢@Jewly,但难道不应该有更简单的方法来使用 state_abbrev 字典而不是创建一个全新的 {state: USA} 字典吗?为澄清起见,我将编辑问题以显示 test.head()
标签: python pandas numpy dictionary series