2016-08-03 2 views
-2

Я новичок в программировании и питоне, поэтому я был бы признателен за ваш совет!Python2.7: Как разбить столбец на несколько столбцов на основе специальных строк?

У меня есть dataframe, как это. enter image description here В колонке «информация» есть 7 различных категорий: действия, местоположения, группы, навыки, достопримечательности, типы и прочее. и каждая категория имеет уникальные значения в пределах []. (т. е. «действия»: ["Tour"]) Я хотел бы разделить столбец «info» на 7 разных столбцов на основе каждой категории, как показано ниже.

enter image description here

Я хотел бы выделить соответствующие имена столбцов, а также поместить соответствующие уникальные строки в [] для каждой строки.

Есть ли простой способ разделить данные? Я думал использовать функции str.split, чтобы разделить на куски и слить все позже. Но не уверен, что это лучший способ пойти, и я хотел посмотреть, есть ли более сложный способ сделать тактику данных.

Любые советы приветствуются!

- UPDATE -

При печати (dframe [ 'Информация']), это показывает, как это. enter image description here

+0

Пожалуйста, не используйте изображения для обмена данными. – ayhan

ответ

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': []} 

После того, как у вас есть данные в виде Словаре, вы можете сделать независимо от того, что вам нравится.

+0

Привет @bgporter! Большое вам спасибо за совет! Что касается предложенного уравнения; s = '' '{"activity": ["Tour"], ~}, вы думаете, если я смогу сделать уравнение с dataframe с определенным столбцом? Поскольку формат Json находится в информационном столбце в dataframe pandas, я хотел сделать что-то вроде s = dframe ['info'] , чтобы извлечь все строки в колонке info, но это не сработало ... – yusuke0426

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'] 
+0

На самом деле вам не нужно json, так как вы уже есть словарь, извините за игнорирование. Я отредактировал код, проверьте, правильно ли вы ответите –

+0

Спасибо за совет! Я запускаю код, и у меня есть ошибка. Он говорит: «TypeError: невозможно преобразовать серию в ». Я не уверен, что вызывает эту ошибку, но я думаю, что цикл вызывает проблему. Существует стрелка, указывающая на вывод цикла в ошибке. У вас есть идеи, как решить проблему? @Gaurav Dhama – yusuke0426

+0

Вы проверили отредактированный код? –

Смежные вопросы