2017-05-23 91 views
0

我有可以表示爲樹結構與每個節點具有四個屬性的JSON數據:nameidchildparentid(pid)(葉節點它只有三個屬性:idpidname)。如何在Python中將json樹數據轉換爲數據框?

{'child': [{'id': '','child':[{'id': '','child':['name':'','id':'','pid':''], 'name': '', 'pid':''}], 'name': '', 'pid': ''}],'name':'','pid':'','id':''} 

我想它有三列像轉換成數據幀:

id, pid, name 
1 .., ..., .... 
2 .., ..., .... 

隨着來自各個層面的數據在三個屬性(id,pid,name)

我試圖pandas.read_json使用默認參數,但它似乎不能迭代整個圖層並且輸出如下:

id, pid, name, child 
1 .., ..., ...., {'id':'','pid': '','name': '', 'child':[{...}]} 
2 .., ..., ...., {'id':'','pid': '','name': '', 'child':[{...}]} 

我想知道是否有一些簡單的方法來解決這個問題,有或沒有pandas

+0

嘗試['json_normalize()'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.json.json_normalize.html?highlight=json_normalize#pandas .io.json.json_normalize)函數,或者根據數據的複雜性,查看'flatten' [library](https://github.com/amirziai/flatten)([blog blog])(https: //medium.com/@amirziai/flattening-json-objects-in-python-f5343c794b10))。 –

+0

謝謝你的回覆。看起來'json_normalize()'不適用於我(也許我設置了錯誤的參數)並且'flatten'只返回太多的列。 – natsuapo

回答

0

我使用遞歸來實現它,我已經證明它對我的數據有效。使用

import json 
import pandas as pd 


def test_iterate(df): 
    global total_data 
    total_data = total_data.append(df[['id','pid','name']]) 
    try: 
     df['child'].apply(lambda x:test_iterate(pd.DataFrame(x))) 
    except Exception as inst: 
     print(inst) 
     pass 

if __name__ == '__main__': 
    total_data = pd.DataFrame() 
    loaddata = json.load(open('test.json')) 
    df = pd.DataFrame(loaddata) 
    test_iterate(df) 
    total_data.to_csv('test.csv',index=None) 
相關問題