Python 使用字典映射返回Nan的数据列
我有一个如下所示的数据框:Python 使用字典映射返回Nan的数据列,python,dictionary,Python,Dictionary,我有一个如下所示的数据框: City State Country Chicago IL United States Boston San Diego CA United States Los Angeles CA United States San Fr
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)
但州和国家栏目的每个单元都返回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
这里出了什么问题?你将如何更改代码?谢谢。我认为应该在“城市”而不是“州”字段调用地图,如下所示:
df['State'] = df['City'].map(state_dict)
但是,这有一个问题,即它会覆盖字典中没有的城市的任何原始“状态”值,例如“芝加哥”。解决这一问题的一个解决方案是以下语法上更笨拙(但我认为正确)的代码:
在农村地区也是一样
我应该补充一点,只有在您没有像示例中那样首先将“City”设置为索引时,这才有效。:hmm.jpg:试试这个:
df['City']=df['City'].str.strip();df=df.set_index('City')
,然后是代码的其余部分。我试过了,仍然没有成功。但下面的答案奏效了。无论如何谢谢你,你帮了大忙!哦,是的!!!!它工作!!!是的,我也想过,不是所有的值都映射到字典中,但我不确定。是的,非常感谢你!!!你刚刚解决了我过去两天的问题。谢谢没问题,很高兴我能帮上忙。是的,我试过了,我得到了一个错误('City','acevent at index Chicago')
,然后我删除了set\u index
行,它解决了所有问题!再次感谢,非常感谢!
df['State'] = df.apply(lambda x: state_dict[x['City']] if x['City'] in state_dict else x['State'], axis=1)