簡體   English   中英

將 JSON 轉換為 Pandas Dataframe 在 Python

[英]Convert JSON to Pandas Dataframe in Python

json格式的數據如下:

dict = {"a":1,"b":2,"c":[{dic 1},{dic2},...so on]}

其中 dic 1 在下面定義,就像這個字典列表一樣

dic 1 = {"d":4,"e":{"f":6,"g":7},"h":{"i":9,"j":[10,11,12]},"m":13}

因此,整個 json 文件如下所示:

dict = {"a":1,"b":2,"c":[{"d":4,"e":{"f":6,"g":7},"h":{"i":9,"j":[10,11,12]},"m":13},{dic2},...so on]}

現在我想將此數據存儲為 Pandas Dataframe 如下表所示,請給出您的建議

預期 Output: 數據幀輸出

您的 json 的結構很復雜! 讓它變得簡單!

您的代碼將無法運行,返回不可散列的類型“dict”。 要解決此問題,只需解壓縮您在主“dict”(即 **dic1)中使用的任何變量。

即使這樣,您也以 2 行和 3 列結束。 為什么? 鍵“c”中的數據是字典列表,pandas 將列表項解釋為列的數據。 整理 json 文件。

最后,避免使用 'dict' 來命名變量。

嘗試這個

import json
import pandas as pd
from glob import glob
import matplotlib.pyplot as plt

#Convert json string to a flat python dictionary

def convert(x):
    ob = json.loads(x)
    for k, v in ob.copy().items():
        if isinstance(v, list):
            ob[k] = ','.join(v)
        elif isinstance(v, dict):
            for kk, vv in v.items():
                ob['%s_%s' % (k, kk)] = vv
            del ob[k]
    return ob

for json_filename in glob('*.json'):
    csv_filename = '%s.csv' % json_filename[:-5]
    print('Converting %s to %s' % (json_filename, csv_filename))
    df = pd.DataFrame([convert(line) for line in open(json_filename, encoding='utf-8')])
    df.to_csv(csv_filename, encoding='utf-8', index=False)

#Convert csv to pdf
data1 = pd.read_csv('data1.csv')
data2 = pd.read_csv('data2.csv')
data3 = pd.read_csv('data3csv')
data4 = pd.read_csv('data4.csv')
data5 = pd.read_csv('data5.csv')

https://gist.github.com/Elsaveram/3258db49eaac5e258401338ae17139a3

將所有字典以 format.json 格式保存在文件中,如下所示

import json
with open('dict.json', 'w') as fp:
json.dump(dict, fp,sort_keys=True, indent=4)

然后試試這個

      df_json = pd.read_json(r'filepath\dict.json', lines=True)

如果它不起作用,我們將找出一個正則表達式來讀取內部的復雜性。 不要忘記導入 pandas 和 json,pandas 大多數時候可以處理所有的復雜性。 這將比使用正則表達式和轉換為 csv 文件所需的時間短得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM