Частичное совпадение строк с str. содержит использование dict-понимания с python / pandas - PullRequest
0 голосов
/ 30 апреля 2018

Aloha Friends,

У меня есть df с различными «именами курсов» в столбце, мне нужно пройти через это, вернуть любые совпадения строк и вернуть значение

с этой целью я создал dict для каждого частичного варианта строки, чтобы я мог сопоставить его со значением

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' в качестве левого операнда требуется строка, а не Series

Я прошел около 30 SO-тем и не смог разобраться, поэтому мои искренние извинения!

DN.

Редактировать для Ракеша:

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 голосов
/ 30 апреля 2018

У вас была небольшая синтаксическая ошибка. Вы также можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...