[英]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 如下表所示,請給出您的建議
您的 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.