使用Pandas将DataFrame转为字典时保留数值列表
Pandas DataFrame转字典时保留数值列表的解决办法
先修复DataFrame再转字典(推荐)
问题本质是你的DataFrame里那些看似列表的内容其实是字符串类型,所以转字典后还是字符串。先把这些列转成真正的列表,再转字典就没问题了:
已知目标列的情况
如果你清楚哪些列是字符串格式的数值列表(比如Coord、Elev),直接用ast.literal_eval转换:
import ast import pandas as pd # 转换指定列 for col in ['Coord', 'Elev']: DF[col] = DF[col].apply(ast.literal_eval) # 转成字典列表 NDF = DF.to_dict(orient='records')
未知目标列的情况
不确定哪些列需要转换的话,可以尝试自动检测(注意:可能误判非列表格式的字符串,谨慎使用):
import ast def str_to_list(val): try: return ast.literal_eval(val) except (ValueError, SyntaxError): return val # 遍历所有列尝试转换 DF = DF.applymap(str_to_list) NDF = DF.to_dict(orient='records')
直接遍历已生成的字典列表修复
如果已经得到了NDF,也可以直接遍历每个字典修改对应字段:
指定字段修改
import ast for item in NDF: item['Coord'] = ast.literal_eval(item['Coord']) item['Elev'] = ast.literal_eval(item['Elev'])
自动检测修改
import ast for item in NDF: for key, val in item.items(): # 判断是否是字符串格式的列表 if isinstance(val, str) and val.startswith('[') and val.endswith(']'): try: item[key] = ast.literal_eval(val) except: # 转换失败就保留原内容 pass
处理后,NDF里的Coord、Elev就会是真正的数值列表,和你期望的输出一致。
内容的提问来源于stack exchange,提问作者I am tired
相关产品推荐
相关产品推荐

