[英]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.