我正在尝试将包含字符串的名为“类别”的列拆分为两个新列“类别”和“子类别”
它基于我们从webrobots.io收集的kickstarter数据集。 “类别”字段包含如下所示的实例:
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"}}}
我正在尝试将斜杠(发布)之前的“”子弹”:”之后的所有行的第一部分添加到新列“类别”中,并将斜杠之后的引号(日历)之前的部分替换为新行新列“子类别”。 我已经尝试过使用str.split和str.extract并假设我需要提取,但是我对正则表达式非常陌生,因此所有尝试都失败了
这是我现在尝试过的,它只给了我两列都包含NaN的列
frame["category"].str.extract(r'(slug":")(/)')
如果结果显示为两个新列,并且“ slug”后两个单词中的每个单词都用斜杠隔开,那就太好了:”
编辑: 感谢Nev1111的想法,在此thread上,将该列视为其自己的数据帧和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)
在打印“框架”时,我得到了两个新列,分别是类别和子类别
答案 0 :(得分:0)
根据您显示给我们的信息,列的类型为object
-dict
frame["category"].str.get('slug')
答案 1 :(得分:0)
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)