簡體   English   中英

Python:將嵌套字典 object 轉換為 pandas Z6A8064B5DF4794555500553C4CD7

[英]Python: Converting a nested Dictionary object into pandas dataframe

我正在嘗試閱讀以下格式的字典:

d = \
  {
  'indent_insert': {1000037121: [('0 - Success',)], 1000037122: [('0 - Success',)]},
  'indent_detail_insert': {1000037121: [('0 - Success',)], 1000037122: [('22051 - duplicate key violation error',)]}
  }

這不是 JSON ,因為它沒有" ['0 - Success',)] 。上面是從下面的代碼片段生成的:

key = ['indent_insert','indent_detail_insert']
result = []
indent_lst = ['1000037121','1000037122']
c_indlts_l = [('0-Success'),('22051 - duplicate key violation error')]
c_ind_l = [('0-Success'),('0-Success')]
indtls_results = dict(zip(indent_lst,c_indlts_l))
ind_result = dict(zip(indent_lst,c_ind_l))
result.append(ind_result)
result.append(indtls_results)
d = dict(zip(key,result))

現在我想要一個 dataframe 如下所示:

IndentNo     indent_insert     indent_details_insert
1000037121   ('0-Success')        ('0 - Success')
1000037122   ('0-Success')        ('22051 - duplicate key violation error')

為了達到同樣的效果,我正在嘗試以下操作:

with open(os.path.join(dir_path,f_ind),'r') as f_r:
  d = f_r.read()
df = pd.DataFrame.from_dict(d)

我正進入(狀態

ValueError: DataFrame constructor not properly called!

我在這里錯過了什么。

如果您的文件包含類似 dict 的字符串,請使用ast模塊中的literal_eval

import ast

with open('data.dat') as f_r:
    data = ''.join([line.strip() for line in f_r.readlines()])
    d = ast.literal_eval(data)
    df = pd.DataFrame.from_dict(d)

Output:

>>> df
               indent_insert                        indent_detail_insert
1000037121  [(0 - Success,)]                            [(0 - Success,)]
1000037122  [(0 - Success,)]  [(22051 - duplicate key violation error,)]

替代 output:

>>> df.applymap(lambda x: x[0])
             indent_insert                      indent_detail_insert
1000037121  (0 - Success,)                            (0 - Success,)
1000037122  (0 - Success,)  (22051 - duplicate key violation error,)

pd.DataFrame.from_dict需要 dict 輸入,而不是字符串:

import json
with open(os.path.join(dir_path,f_ind),'r') as f_r:
  j_s = f_r.read()
df = pd.DataFrame.from_dict(json.loads(j_s))

暫無
暫無

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

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