Python Pandas регулярное выражение с выводом NaN - PullRequest
2 голосов
/ 06 августа 2020

У меня есть столбец pandas фрейма данных с такими символами (предполагается, что это словарь, но после извлечения в CSV-файл превратился в строки): name ", поэтому в данном случае это будет" Drinks ".

Код, который у меня есть сейчас (показанный ниже), продолжает выводить NaN для всего фрейма данных.

df['extracted_category'] = df.category.str.extract('("name":*(?="slug"))')

Что не так с мое регулярное выражение? Спасибо!

Ответы [ 3 ]

3 голосов
/ 06 августа 2020

Лучше преобразовать его в фрейм данных, вы можете использовать eval и pd.Series, например

# sample dataframe
df
                                          category
0  {"id":307,"name":"Drinks","slug":"food/drinks"}

df.category.apply(lambda x : pd.Series(eval(x)))
    id    name         slug
0  307  Drinks  food/drinks

Или преобразовать только строку в словарь, используя eval

df['category'] = df.category.apply(eval)

df.category.str["name"]
0    Drinks
Name: category, dtype: object
0 голосов
/ 06 августа 2020

Итак, во-первых, крайняя скобка в ("name": * (? = "Slug")) должна быть go, потому что они представляют первую группу, а извлеченное значение будет равно первой группе, которая это не то место, где находится значение 'name'.

Более простым регулярным выражением было бы "name": "(\ w *)" (Примечание: не забудьте сохранить ту часть регулярного выражения, которую вы хотите извлекается внутри скобок). Это регулярное выражение ищет следующую строку:

    "name":"

и извлекает все алфавиты, следующие за ней (\ w *), прежде чем остановиться на другой двойной кавычке.

Вы можете проверить свое регулярное выражение на : https://regex101.com/

0 голосов
/ 06 августа 2020

Hi @ Ell ie проверьте также этот подход:

x = {"id":307,"name":"Drinks","slug":"food/drinks"}
result = [(key, value) for key, value in x.items() if key.startswith("name")]
print(result)
[('name', 'Drinks')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...