Python 将元素列表映射到熊猫中的元素类别?

Python 将元素列表映射到熊猫中的元素类别?,python,python-2.7,pandas,dataframe,Python,Python 2.7,Pandas,Dataframe,我已经在谷歌上搜索了很多次,但是我仍然找不到一个快速的方法。 假设我的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.

我已经在谷歌上搜索了很多次,但是我仍然找不到一个快速的方法。 假设我的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·罗纳德、“莱昂内尔·梅西”和那些足球运动员的名字一次换成一个班级,但不能一个接一个,因为我有一个长长的专栏

您需要创建一个从玩家类型到玩家列表的映射表单

然后,您可以使用面向数据的包(如
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
只有在找不到匹配项时才会返回。

少量代码会有所帮助,尤其是允许用户轻松构建可测试数据集的代码。有关于提问的有用建议。熊猫如何知道这些玩家符合这些类别?是否有某种映射数据?Python需要在互联网上爬行才能找到这些名字和他们的联盟吗?在这里使用“next”有什么意义?@ManishSaraswat,
next
在生成器表达式上返回下一次迭代;它在找到第一个实例时停止。这只会成为一个问题,如果你有一个运动员在一个以上的类别。参数
None
仅在未找到匹配项时返回。