使用带有 python/pandas 的 dict 理解与 str.contains 进行部分字符串匹配
Posted
技术标签:
【中文标题】使用带有 python/pandas 的 dict 理解与 str.contains 进行部分字符串匹配【英文标题】:Partial string match with str.contains using dict comprehension with python/pandas 【发布时间】:2018-10-10 18:17:36 【问题描述】:我有一个数据框,其中有一列名为 course_names
的映射字典,其中包含我想在键中匹配的课程名称列表以及我想在值列中分配的值
import pandas as pd
df = pd.DataFrame('course_name' : ['Phsyics, Maths','Algebra & Maths','History','Geology','Biology'])
mapping = 'Algebra & Maths' : 'Mathematics',
'Phsyics' : 'Science',
'History' : 'History',
'Geology' : 'Geology',
'Biology' : 'Science'
# this goes on for about another 35 lines.
#my attempt so far.
df['keys'] = [k for k, v in mapping.items() if df['course_name'] in k]
当我运行这段代码时,我得到:
TypeError: 'in <string>' requires string as left operand, not Series
预期输出:
course_name key
0 Phsyics, Maths Science
1 Algebra & Maths Mathematics
2 History History
3 Geology Geology
4 Biology Science
【问题讨论】:
【参考方案1】:你有一个小的语法错误。你也可以使用map
试试:
import pandas as pd
df = pd.DataFrame("course_name" : ["Algebra & Maths", "Phsyics"])
Mapping = 'Algebra & Maths' : 'Mathematics','Phsyics' : 'Science'
df["keys"] = [v for k, v in Mapping.items() if k in df['course_name'].tolist()]
#df["keys"] = df["course_name"].map(Mapping)
print(df)
输出:
course_name keys
0 Algebra & Maths Mathematics
1 Phsyics Science
【讨论】:
谢谢!这并没有在我的帖子中给我所需的输出(不清楚吗?)我需要将课程名称与键匹配并返回值。 更新了 sn-p。 谢谢!我现在收到错误:值的长度与索引的长度不匹配我需要应用 pd.series 吗? 对不起,我不明白?这只是给了我一整列 NaNLength of values does not match length of index
这个错误是因为DF["course_name"]中的key-value不匹配以上是关于使用带有 python/pandas 的 dict 理解与 str.contains 进行部分字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章