dColumns返回Nan与字典映射

时间:2018-03-26 20:51:34

标签: python dictionary

我的数据框如下所示:

         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

这里出了什么问题?你会如何改变代码?感谢。

1 个答案:

答案 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)

对于国家/地区来说,它也是一样的想法。

我应该补充一点,只有在你没有首先设置城市'作为你的例子中的索引。