我的数据框如下所示:
City State Country
Chicago IL United States
Boston
San Diego CA United States
Los Angeles CA United States
San Francisco
Sacramento
Vancouver BC Canada
Toronto
我有3个包含所有缺失值的列表:
city_list = ['Boston', 'San Francisco', 'Sacramento', 'Toronto']
state_list = ['MA', 'CA', 'CA', 'ON']
country_list = ['United States', 'United States', 'United States', 'Canada']
这是我理想的结果:
City State Country
Chicago IL United States
Boston MA United States
San Diego CA United States
Los Angeles CA United States
San Francisco CA United States
Sacramento CA United States
Vancouver BC Canada
Toronto ON Canada
我使用了一个有用的人建议的潜在方法,但我一直在摸不着头脑,无法弄清楚出了什么问题。这是代码:
state_dict = dict(zip(city_list, state_list))
country_dict = dict(zip(city_list, country_list))
df = df.set_index('City')
df['State'] = df['State'].map(state_dict)
df['Country'] = df['Country'].map(country_dict)
df.reset_index()
print(df.City, df.State, df.Country)
但State和Country列的每个单元都返回NaN。
City State Country
Chicago NaN NaN
Boston NaN NaN
San Diego NaN NaN
Los Angeles NaN NaN
San Francisco NaN NaN
Sacramento NaN NaN
Vancouver NaN NaN
Toronto NaN NaN
这里出了什么问题?你会如何改变代码?感谢。
答案 0 :(得分:1)
我认为地图应该在“城市”上调用。而不是' State'字段,如:
df['State'] = df['City'].map(state_dict)
然而,这有一个问题,就是它会覆盖任何原始状态'不在您词典中的城市的值 - 例如'芝加哥&#39 ;.解决这个问题的一个解决方案是以下语法笨拙(但我相信正确)代码:
df['State'] = df.apply(lambda x: state_dict[x['City']] if x['City'] in state_dict else x['State'], axis=1)
对于国家/地区来说,它也是一样的想法。
我应该补充一点,只有在你没有首先设置城市'作为你的例子中的索引。