2016-10-25 2 views
1

Я пытаюсь понять, как сделать следующее, не используя цикл.Как преобразовать строки JSON python в столбцы dataframe без цикла

У меня есть dataframe, который имеет несколько столбцов, включая строку, содержащую строку JSON. То, что я пытаюсь сделать, это преобразовать столбец строки JSON в свои собственные столбцы в области данных. Например, у меня есть следующий dataframe:

Column 1 | column 2 | Json Column 

123  | ABC  | {"anotherNumber":345,"anotherString":"DEF"} 

Я хочу, чтобы преобразовать это:

Column 1 | column 2 | anotherNumber | anotherString 

123  | ABC  | 345   | DEF 

ответ

1

Вы можете сначала конвертировать Json Column в dict при необходимости json.loads:

import json 

df = pd.DataFrame({'Column 1':[123], 
        'Column 2':['ABC'], 
        'Json Column':['{"anotherNumber":345,"anotherString":"DEF"}']}) 
print (df) 

    Column 1 Column 2          Json Column 
0  123  ABC {'anotherString': 'DEF', 'anotherNumber': 345} 

print (type(df.ix[0,'Json Column'])) 
<class 'str'> 

df['Json Column'] = df['Json Column'].apply((json.loads)) 

print (type(df.ix[0,'Json Column'])) 
<class 'dict'> 

Затем генерировать список списков и создать Dataframe от конструктора:

print (df['Json Column'].values.tolist()) 
[{'anotherString': 'DEF', 'anotherNumber': 345}] 

df1 = pd.DataFrame(df['Json Column'].values.tolist()) 
print (df1) 
    anotherNumber anotherString 
0   345   DEF 

concat Последних к оригиналу, где столбец Json Column был удален drop:

print (pd.concat([df.drop('Json Column', axis=1), df1], axis=1)) 
    Column 1 Column 2 anotherNumber anotherString 
0  123  ABC   345   DEF 
+0

Спасибо! Я пробовал это раньше, но у меня не было кусочка json.loads, так что это не сработало. – Carlos

+0

Да, после downvote Я знаю, что это строковый столбец. Спасибо, что приняли! – jezrael

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