【问题标题】:Map list of elements to category of element in pandas?将元素列表映射到熊猫中的元素类别?
【发布时间】:2018-03-09 13:28:00
【问题描述】:

我一直在谷歌上搜索,但我仍然找不到快速的方法。 假设我的 csv 文件中有一个列:

1. C.Ronald         
2. Conor McGregor    
3. Lionel Messi
4. LeBron James
5. Derrick Rose   
6. Tom Brady
7. ...
8. ...

等等,我想通过python将那些名称替换为以下三个类别:

1. Soccer player
2. MMA fighter
3. Soccer player
4. NBA player
5. NBA player
6. NFL plaer
7. ... 
8. ...

我如何将“C.Ronald”、“Lionel Messi”和那些足球运动员的名字一次性替换到一个班级中,但不能一个一个替换,因为我的专栏很长。

【问题讨论】:

  • 一点点代码会有所帮助——尤其是可以让某人轻松构建可测试数据集的代码。 This page 有关于提问的有用建议。
  • pandas 如何知道这些玩家是否符合这些类别?是否有某种映射数据? Python 是否需要爬网才能找到这些名称及其联盟关联?

标签: python python-2.7 pandas dataframe


【解决方案1】:

您需要创建一个播放器类型到播放器列表的映射表。

然后您可以使用pandas 等面向数据的包通过字典为您执行映射:

from io import StringIO
import pandas as pd

mystr = StringIO("""C.Ronald
Conor McGregor
Lionel Messi
LeBron James
Derrick Rose
Tom Brady
""")

df = pd.read_csv(mystr, header=None, names=['Player'])

d = {'Soccer player': ['C.Ronald', 'Lionel Messi'],
     'MMA fighter': ['Conor McGregor'],
     'NBA player': ['LeBron James', 'Derrick Rose'],
     'NFL player': ['Tom Brady']}

df['Category'] = df['Player'].map(lambda x: next((k for k, v in d.items() if x in v), None))

#            Player       Category
# 0        C.Ronald  Soccer player
# 1  Conor McGregor    MMA fighter
# 2    Lionel Messi  Soccer player
# 3    LeBron James     NBA player
# 4    Derrick Rose     NBA player
# 5       Tom Brady     NFL player

说明

next 在生成器表达式上返回下一次迭代;它在找到第一个实例时停止。如果您的运动员不止一个类别,这只会成为一个问题。参数None 仅在未找到匹配项时返回。

【讨论】:

  • 这里使用'next'有什么意义?
  • @ManishSaraswat, next 在生成器表达式上返回下一次迭代;它在找到第一个实例时停止。仅当您在多个类别中拥有一名运动员时,这才会成为一个问题。参数None 仅在未找到匹配项时返回。
猜你喜欢
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多