2017-07-12 49 views
1

我在使用Python將JSON文件轉換爲CSV時遇到了問題,我不確定發生了什麼問題。轉換完成但不正確。由於JSON文件的格式化,我認爲存在問題;然而,這是一個有效的JSON。將JSON轉換爲帶有熊貓庫的CSV

這是我的JSON文件的內容:

{ 
    "tags": [{ 
     "name": "ACDTestData", 
     "results": [{ 
      "groups": [{ 
       "name": "type", 
       "type": "number" 
      }], 
      "values": [ 
       [ 
        1409154300000, 
        1.16003418, 
        3 
       ], 
       [ 
        1409154240000, 
        0.024047852, 
        3 
       ], 
       [ 
        1409153280000, 
        10.25598145, 
        3 
       ], 
       [ 
        1409152200000, 
        10.73193359, 
        3 
       ], 
       [ 
        1409151240000, 
        0.024047852, 
        3 
       ], 
       [ 
        1409080200000, 
        14.34393311, 
        3 
       ], 
       [ 
        1409039580000, 
        4.883850098, 
        3 
       ], 
       [ 
        1408977480000, 
        5.520019531, 
        3 
       ], 
       [ 
        1408977360000, 
        0.00793457, 
        3 
       ], 
       [ 
        1408974300000, 
        2.695922852, 
        3 
       ], 
       [ 
        1408968480000, 
        0.011962891, 
        3 
       ], 
       [ 
        1408965720000, 
        0.427978516, 
        3 
       ], 
       [ 
        1408965660000, 
        0.011962891, 
        3 
       ] 
      ] 
     }] 
    }] 
} 

這裏是我的嘗試:

import pandas as pd 
json_file = pd.read_json("QueryExportTest2.json") 
json_file.to_csv() 

這裏是我的輸出:

,tags\n0,"{u\'name\': u\'ACDTestData\', u\'results\': [{u\'values\': [[1409154300000L, 1.16003418, 3], [1409154240000L, 0.024047852, 3], [1409153280000L, 10.25598145, 3], [1409152200000L, 10.73193359, 3], [1409151240000L, 0.024047852, 3], [1409080200000L, 14.34393311, 3], [1409039580000L, 4.883850098, 3], [1408977480000L, 5.520019531, 3], [1408977360000L, 0.00793457, 3], [1408974300000L, 2.695922852, 3], [1408968480000L, 0.011962891000000002, 3], [1408965720000L, 0.42797851600000003, 3], [1408965660000L, 0.011962891000000002, 3]], u\'groups\': [{u\'type\': u\'number\', u\'name\': u\'type\'}]}]}"\n

這是不對的,因爲當我將它放入一個新的Excel CSV文檔而不是僅打印它時,CSV全部在一個單元格中。

如果有幫助,當我嘗試這樣:

import json 

with open('QueryExportTest2.json') as json_data: 
d = json.load(json_data) 
print(d) 

我得到這個:

{u'tags': [{u'name': u'ACDTestData', u'results': [{u'values': [[1409154300000L, 1.16003418, 3], [1409154240000L, 0.024047852, 3], [1409153280000L, 10.25598145, 3], [1409152200000L, 10.73193359, 3], [1409151240000L, 0.024047852, 3], [1409080200000L, 14.34393311, 3], [1409039580000L, 4.883850098, 3], [1408977480000L, 5.520019531, 3], [1408977360000L, 0.00793457, 3], [1408974300000L, 2.695922852, 3], [1408968480000L, 0.011962891, 3], [1408965720000L, 0.427978516, 3], [1408965660000L, 0.011962891, 3]], u'groups': [{u'type': u'number', u'name': u'type'}]}]}]}

我怎麼能這樣嵌套的JSON正確轉換爲CSV?

回答

0

你的json是一個嵌套字典(帶有列表和其他字典)。我猜你對jsonvalues部分感興趣。如果我的假設是正確的,因爲這是一個條目JSON,請嘗試以下

df = pd.DataFrame.from_dict(json_str['tags'][0]['results'][0]['values']) 
df.columns = ['var1','var2', 'var3'] 
df.to_csv(filename) 

如果你將有更多的記錄,你將不得不遍歷值列表,即你可以添加他們。

all_results = json['tags'][0]['results'] 
for i in range(0, len(all_results)) 
    if i == 0: 
     my_df = pd.DataFrame(all_results[i]['values']) 
    else: 
     my_df.append(pd.DataFrame(all_results[i]['values'])) 
+0

感謝您的輸入。然而,當我嘗試這個時,我得到一個錯誤,說「KeyError:'values'。我假設這意味着這個鍵不在字典中 - 我將如何添加它?(我是使用Python的新手) – tseivad359

+0

我在我的答案的第二部分有一個錯誤,現在它的更新,也許這是導致錯誤。 嗯..如果你得到你發佈的JSON的錯誤,你應該以錯誤的方式訪問該鍵如果是新的json,添加到字典中的方法是'my_dict ['values'] = np.array([[1,2,3],[4,5, 6]])例如,在這裏添加特定的值 –

0

你想要得到什麼?這裏的問題是,你的JSON是嵌套的,比如你嘗試做這樣的事情:

pandas.DataFrame.from_dict(jour_json['tags']) 

你會得到數據幀有兩列 - 名稱和結果。

+0

我想要一個包含'值'的三列,例如第一條記錄的CSV:列1:1409154300000,列2:1.16003418和列3:3。 – tseivad359