2016-10-25 25 views
1

我想弄清楚如何在不使用循環的情況下執行以下操作。如何將python JSON行轉換爲無循環的數據幀列

我有一個數據框有幾個列,包括一個具有JSON字符串。我想要做的是將JSON字符串列轉換爲數據框中自己的列。比如我有以下數據框:

Column 1 | column 2 | Json Column 

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

我想轉換到這一點:

Column 1 | column 2 | anotherNumber | anotherString 

123  | ABC  | 345   | DEF 

回答

1

你可以先轉換Json Columndict如果必要的話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到原來,這裏由drop去除柱Json Column是:

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