Работа с объектом series в Pandas
Есть столбец , мне нужны только значения по ключу 'name'.
df['key_skills']
0 []
1 [{'name': 'Git'}, {'name': 'SQL'}, {'name': 'Т...
2 [{'name': 'SQL'}, {'name': 'Linux'}, {'name': ...
3 [{'name': 'Пользователь ПК'}, {'name': 'Работа...
4 [{'name': 'MS Dos'}, {'name': 'Диагностика ПК'...
...
Name: key_skills, Length: 69656, dtype: object
Написал код:
def get_key_skills(new_key_skills):
asd = new_key_skills.replace("{'name': ", "").replace("}", "")
return (asd)
и добавил новый столбец:
df['new_key_skills'] = df['key_skills'].apply(get_key_skills)
Вопрос можно как-то сделать более по питоновски?Или как работать в Pandas c строкой в которой список словарей.Спасибо
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Предположим, есть датафрейм:
import pandas as pd
df = pd.DataFrame([["[{'name':'SQL'}, {'name': 'python'}, {'name' : 'applied magic']"],
["[{'skill':'SQL'}, {'name': 'oracle'}, {'virtue' : 'fishing']"]], columns = ["key_skills"])
key_skills
0 [{'name':'SQL'}, {'name': 'python'}, {'name' : 'applied magic']
1 [{'skill':'SQL'}, {'name': 'oracle'}, {'virtue' : 'fishing']
можно решить вопрос с помощью метода findall:
- если нужны значения только по ключу 'name':
df['new_key_skills'] = df["key_skills"].str.findall(r"'name'\s?:\s?'([^']+)'")
получаем df:
key_skills new_key_skills
0 [{'name':'SQL'}, {'name': 'python'}, {'name' : 'applied magic'] [SQL, python, applied magic]
1 [{'skill':'SQL'}, {'name': 'oracle'}, {'virtue' : 'fishing'] [oracle]
Если нужно получить просто все значения для любых ключей, то:
df['new_key_skills'] = df["key_skills"].str.findall(r":\s?'([^']+)'")
получаем:
key_skills new_key_skills
0 [{'name':'SQL'}, {'name': 'python'}, {'name' : 'applied magic'] [SQL, python, applied magic]
1 [{'skill':'SQL'}, {'name': 'oracle'}, {'virtue' : 'fishing'] [SQL, oracle, fishing]