部分字符串与str.contains匹配使用dict理解与python / pandas

时间:2018-04-30 15:59:12

标签: python pandas

Aloha Friends,

我在一个列中有一个带有各种“course_names”的df我需要遍历这个并返回任何字符串匹配并返回一个值

为此,我创建了一个包含每个部分字符串变化的字典,以便将其映射到值

col A 
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. 

下一个问题分两步进行

我需要将键匹配映射到新列中的值

将值分配给新列后,我需要遍历新列并查找与查询匹配的任何内容

例如,如果用户选择“科学”,我需要将他映射到新列以说“是”,用户可以拥有多个科目,但我确信我可以解决这个难题,这是第1部分!

到目前为止,我已经掌握了有限的编码知识(我以为我现在能够解决这个问题......但是嘿嘿)

到目前为止我的代码:

import os
import pandas as pd
import numpy as np

os.chdir('')
df = pd.read_excel('Bookings.xlsx')
mapping = {'Algebra & Maths' : Mathematics,
'Phsyics' : 'Science'} 
df['keys'] = [k for k, v in Mapping.items() if df['course_name'] in k]

当我运行此代码时,我得到:TypeError:'in'要求字符串作为左操作数,而不是系列

我已经经历了大约30个SO线程,我无法解决这个问题,所以我最诚挚的道歉!

DN。

为Rakesh编辑:

course_name,
this course English is good
science and biology course attend
English Literature with Shakespeare
Maths in the Golden Age

所以我的DF有一个这样的数据列表,所以,在我的脑海中,我想在我的dict中对我的键运行部分匹配,并在新列中返回值。

所以我的问题在于对我的词典中的键进行部分匹配。这有意义吗?

1 个答案:

答案 0 :(得分:3)

您的语法错误很少。您也可以使用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