Как сделать новые столбцы из строк в панде dataframe - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь разбить столбец под названием «категория», содержащий строки, на два новых столбца: «категория» и «подкатегория»

Он основан на наборе данных 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)

При печати "рамка" я получаю два новых столбца с категорией и подкатегорией

Ответы [ 2 ]

0 голосов
/ 22 мая 2019
from pandas import DataFrame

df=DataFrame( {"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"}}} ) 

df[['Category','Subcategory']]=df['slug'].str.split('/',expand=True)
0 голосов
/ 22 мая 2019

Исходите из того, что вы показываете нам, что столбцы типа object - dict

frame["category"].str.get('slug') 
...