Python:将嵌套字典对象转换为pandas DataFrame报错问题求解
错误原因
- 入参类型错误:你通过
f_r.read()读取到的d是字符串类型,pd.DataFrame.from_dict要求输入参数为字典/类字典可迭代结构,直接传入字符串会触发你遇到的ValueError报错。 - 数据结构适配问题:就算你将字符串转为字典,原嵌套字典的每个值是被列表包裹的元组,直接转换后的值会带多余的列表外层,不符合你预期的输出格式。
解决方法
你需要先把读取到的字符串转为Python字典,再做DataFrame转换,由于你的字典是Python字面量格式不是标准JSON,用ast.literal_eval解析是最安全的方案,完整可运行代码如下:
import pandas as pd import os import ast # 读取文件内容 with open(os.path.join(dir_path,f_ind),'r',encoding='utf-8') as f_r: d_str = f_r.read() # 把字符串转成Python字典 d = ast.literal_eval(d_str) # 转换为DataFrame,此时indent号为行索引 df = pd.DataFrame(d) # 重置索引转为普通列,并重命名为IndentNo df = df.reset_index(names='IndentNo') # 匹配你需要的列名 df = df.rename(columns={'indent_detail_insert':'indent_details_insert'}) # 去掉值外层的列表包裹,取出里面的元组 df['indent_insert'] = df['indent_insert'].str[0] df['indent_details_insert'] = df['indent_details_insert'].str[0]
运行以上代码就能得到你要求格式的DataFrame。
内容的提问来源于stack exchange,提问作者pythondumb
相关产品推荐
相关产品推荐

