Я пытаюсь разбить столбец под названием «категория», содержащий строки, на два новых столбца: «категория» и «подкатегория»
Он основан на наборе данных kickstarter, который мы собрали на webrobots.io. Поля "category" содержат экземпляры, которые выглядят так:
In: frame.category[1]
Out: {"id":325,"name":"Calendars","slug":"publishing/calendars","position":4,"parent_id":18,"color":14867664,"urls":{"web":{"discover":"http://www.kickstarter.com/discover/categories/publishing/calendars"}}}
Я пытаюсь получить первую часть всех строк после '"slug": "' перед косой чертой (публикация) в новый столбец" категория ", а часть после косой черты перед кавычкой (календари) в новый столбец "подкатегория".
Я попытался с str.split и str.extract и предположил, что извлечение это то, что мне нужно, но я очень плохо знаком с регулярными выражениями, поэтому все мои попытки потерпели неудачу
Это то, что я сейчас пробовал, просто мне дают два столбца, каждый из которых содержит NaN, вплоть до
frame["category"].str.extract(r'(slug":")(/)')
Было бы замечательно, если бы результат получился в виде двух новых столбцов с каждым из двух слов, разделенных косой чертой после "slug": "
Edit:
Благодаря идее Nev1111 трактовать столбец как свой собственный фрейм данных и joris в этом потоке я пришел к следующему коду, который прекрасно работает, хотя это может быть не лучшим решением
#Assigning 'category' to its own dataframe and reading it as a dictionary with each key as its own column
df=frame['category'].map(eval).apply(pd.Series)
#splitting "slug" and creating new columns based on the category and subcategory
frame[['category','subcategory']]=df['slug'].str.split('/',expand=True)
При печати "рамка" я получаю два новых столбца с категорией и подкатегорией