簡體   English   中英

部分字符串與 str.contains 匹配,使用 dict comprehension with python/pandas

[英]Partial string match with str.contains using dict comprehension with python/pandas

我有一個數據框,其中包含一個名為course_names的列, 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

你有一個小的語法錯誤。 您也可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM