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)