Python 将元素列表映射到熊猫中的元素类别?
我已经在谷歌上搜索了很多次,但是我仍然找不到一个快速的方法。 假设我的csv文件中有一列: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.
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
仅在未找到匹配项时返回。