Python2.7:如何根据这样的特殊字符串将列拆分成多列?

时间:2016-08-03 19:29:42

标签: python python-2.7 pandas split multiple-columns

我是编程和python的新手,所以我很感激你的建议!

我有这样的数据框。 enter image description here 在“信息”列中,有7个不同的类别:活动,地点,群组,技能,景点,类型和其他。并且每个类别在 [] 中都有唯一值。(即“活动”: [“Tour”] ) 我想根据每个类别将“信息”列拆分为7个不同的列,如下所示。

enter image description here

我想分配适当的列名,并在[]中将相应的唯一字符串放到每一行。

有没有简单的方法来分割数据帧? 我正在考虑使用str.split函数分割成碎片并稍后合并。但不确定这是最好的方法,我想看看是否有更复杂的方法来制作这样的数据帧。

感谢任何建议!

- 的更新 -

打印时(dframe ['info']),它显示如下。 enter image description here

3 个答案:

答案 0 :(得分:0)

看起来info列的内容是JSON格式的,因此您可以轻松地将其解析为dict对象:

>>> import json
>>> s = '''{"activities": ["Tour"], "locations": ["Tokyo"], "groups": []}'''
>>> j = json.loads(s)
>>> j
{u'activities': [u'Tour'], u'locations': [u'Tokyo'], u'groups': []}

一旦您将数据作为词典,您就可以随心所欲地做任何事情。

答案 1 :(得分:0)

好的,这是怎么做的:

import pandas as pd
import ast

#Initial Dataframe is df
mylist = list(df['info'])
mynewlist = []

for l in mylist:
    mynewlist.append(ast.literal_eval(l))

df_info = pd.DataFrame(mynewlist)

#Add columns of decoded info to the initial dataset
df_new = pd.concat([df,df_info],axis=1)

#Remove the column info
del df_new['info']

答案 2 :(得分:-1)

您可以使用json库来做到这一点。

1)导入json libray

import json

2)将该列的所有行转换为字符串,然后将json.loads函数应用于所有这些行。将结果插入对象

jsonO = df['info'].map(str).apply(json.loads)

3)Json对象现在是一个json数据框,您可以在其中导航。对于Json数据框的每一列,在最终数据框中创建一列

df['Activities'] = jsonO.apply(lambda x: x['Activities'])

在json数据帧的一列中,每个“行”都转储到最终数据帧df的新列中

4)对您感兴趣的所有列重新做3