【问题标题】:Mapping a dictionary to a dataframe not working correctly将字典映射到数据框无法正常工作
【发布时间】:2017-04-12 11:20:42
【问题描述】:

我正在尝试将字典映射到数据框。我挖掘了一些代码并将我认为可行的东西拼凑在一起,但代码没有运行。任何人都可以帮忙绘制地图吗?

Top15 是以 Country 作为索引的现有数据框。

ContinentDict  = {'China':'Asia', 
              'United States':'North America', 
              'Japan':'Asia', 
              'United Kingdom':'Europe', 
              'Russian Federation':'Europe', 
              'Canada':'North America', 
              'Germany':'Europe', 
              'India':'Asia',
              'France':'Europe', 
              'South Korea':'Asia', 
              'Italy':'Europe', 
              'Spain':'Europe', 
              'Iran':'Asia',
              'Australia':'Australia', 
              'Brazil':'South America'}




Top15['Continent'] = Top15['Country'].map(ContinentDict)

【问题讨论】:

  • 如果没有原始数据,你的 df 的代码那么这只是推测,你需要发布数据和代码以便其他人重现这个
  • 什么不工作,你能显示你的输入和预期的输出,例如什么是Top15
  • 请阅读this

标签: python pandas dictionary mapping


【解决方案1】:

这应该有效。这是一个例子:

In [1]:Top15 = pd.DataFrame({'Country':['France','Brazil', 'Canada', 'Japan']})
      Top15
Out[1]:
  Country
0  France
1  Brazil
2  Canada
3   Japan

现在您确实可以使用pd.Series.map 使用字典作为参数:

In [2]: Top15['Continent'] = Top15['Country'].map(ContinentDict)
        Top15
Out[2]:
  Country      Continent
0  France         Europe
1  Brazil  South America
2  Canada  North America
3   Japan           Asia

更新:现在我们知道 Top15 是按国家/地区索引的

问题是index.map 不允许将字典作为参数。但是您可以执行以下任一操作:

# 1000 loops, best of 3: 696 µs per loop
Top15['Continent'] = Top15.index.to_series().map(ContinentDict)

# 1000 loops, best of 3: 722 µs per loop
Top15['Continent'] = pd.Series(Top15.index).map(ContinentDict)

或者更快:

# 10000 loops, best of 3: 156 µs per loop
Top15['Continent'] = Top15.index.map(lambda x: ContinentDict[x])

【讨论】:

  • Top15 已经是一个以 Country 作为索引的现有数据框。 pd.Series.map 不应该已经工作了吗?
  • 查看我的更新,包括分析三种可能性
猜你喜欢
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多