如何从熊猫数据框中的字符串创建新列

时间:2019-05-22 15:26:15

标签: python-3.x string pandas dataframe extract

我正在尝试将包含字符串的名为“类别”的列拆分为两个新列“类别”和“子类别”

它基于我们从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)

在打印“框架”时,我得到了两个新列,分别是类别和子类别

2 个答案:

答案 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)