如何从JSON文件提取数据并转为Python表格格式?
解析JSON中的表格数据并转为Pandas DataFrame
你的JSON文件仅包含一个OUT字段,其值是一串用分号分隔的结构化字符串,直接使用pd.DataFrame(data)会因数据结构不匹配导致输出混乱。需要先解析该字符串,再转换为规范的表格格式。
原始JSON内容
{"OUT":"074531@@@;1-1=29=0;1-2=193=0;1-3=199=0;1-4=403=0;1-5=334=0;1-6=295=0;1-7=999=0;1-8=57=0;1-9=77=0;1-10=166=0;1-11=116=0;1-12=999=0;2-1=9.3=1;2-2=89=0;2-3=203=0;2-4=346=0;2-5=150=0;2-6=54=0;2-7=466=0;2-8=12=0;2-9=34=0;2-10=115=0;2-11=88=0;2-12=629=0;3-1=87=0;3-2=510=0;3-3=845=0;3-4=873=0;3-5=773=0;3-6=563=0;3-7=999=0;3-8=197=0;3-9=260=0;3-10=601=0;3-11=933=0;3-12=999=0;4-1=60=0;4-2=458=0;4-3=644=0;4-4=540=0;4-5=243=0;4-6=351=0;4-7=999=0;4-8=117=0;4-9=201=0;4-10=256=0;4-11=693=0;4-12=999=0;5-1=16=0;5-2=138=0;5-3=174=0;5-4=674=0;5-5=337=0;5-6=152=0;5-7=731=0;5-8=43=0;5-9=53=0;5-10=181=0;5-11=141=0;5-12=999=0;6-1=80=0;6-2=466=0;6-3=552=0;6-4=999=0;6-5=436=0;6-6=416=0;6-7=999=0;6-8=116=0;6-9=257=0;6-10=676=0;6-11=356=0;6-12=873=0;7-1=35=0;7-2=219=0;7-3=257=0;7-4=483=0;7-5=287=0;7-6=220=0;7-7=474=0;7-8=74=0;7-9=77=0;7-10=186=0;7-11=121=0;7-12=999=0;8-1=52=0;8-2=360=0;8-3=410=0;8-4=820=0;8-5=474=0;8-6=410=0;8-7=999=0;8-8=94=0;8-9=145=0;8-10=326=0;8-11=169=0;8-12=999=0;9-1=34=0;9-2=231=0;9-3=325=0;9-4=492=0;9-5=218=0;9-6=318=0;9-7=999=0;9-8=51=0;9-9=59=0;9-10=187=0;9-11=141=0;9-12=999=0;10-1=59=0;10-2=304=0;10-3=575=0;10-4=902=0;10-5=365=0;10-6=492=0;10-7=999=0;10-8=122=0;10-9=208=0;10-10=246=0;10-11=307=0;10-12=999=0;11-1=78=0;11-2=520=0;11-3=902=0;11-4=999=0;11-5=873=0;11-6=712=0;11-7=999=0;11-8=154=0;11-9=273=0;11-10=458=0;11-11=239=0;11-12=999=0;12-1=55=0;12-2=307=0;12-3=314=0;12-4=751=0;12-5=458=0;12-6=436=0;12-7=999=0;12-8=101=0;12-9=157=0;12-10=300=0;12-11=221=0;12-12=483=0;13-1=11=0;13-2=138=0;13-3=181=0;13-4=410=0;13-5=178=0;13-6=133=0;13-7=721=0;13-8=25=0;13-9=28=0;13-10=94=0;13-11=73=0;13-12=999=0;14-1=15=0;14-2=161=0;14-3=208=0;14-4=257=0;14-5=199=0;14-6=165=0;14-7=552=0;14-8=27=0;14-9=42=0;14-10=131=0;14-11=51=0;14-12=999=0"}
你尝试的错误代码
import json import pandas as pd with open("double.json") as f: data = json.load(f) df = pd.DataFrame(data) print(df)
解决方案代码
import json import pandas as pd # 读取JSON文件 with open("double.json", encoding="utf-8") as f: data = json.load(f) # 提取OUT字段内容,分割为数据条目 out_str = data["OUT"] # 跳过开头的非表格部分,按分号拆分所有条目 entries = out_str.split(";")[1:] # 解析每个条目为结构化数据 parsed_data = [] for item in entries: if not item: continue # 拆分位置、数值、标记 position, value, flag = item.split("=") row, col = position.split("-") # 转换数据类型 parsed_data.append({ "行号": int(row), "列号": int(col), "数值": float(value) if "." in value else int(value), "标记": int(flag) }) # 转换为长格式DataFrame long_df = pd.DataFrame(parsed_data) # 转换为行号为索引、列号为列名的宽格式表格(匹配常规表格结构) wide_df = long_df.pivot(index="行号", columns="列号", values="数值") # 输出结果 print("长格式表格预览:") print(long_df.head()) print("\n宽格式表格预览:") print(wide_df)
代码说明
- 提取并分割字符串:先取出
OUT字段的值,跳过开头的074531@@@部分,再按分号拆分出每个单元格的描述条目。 - 解析条目:将每个条目按
=拆分为位置(行-列)、数值、标记,再拆分行列号并转换为对应的数据类型。 - 转换为DataFrame:先得到包含行号、列号、数值、标记的长格式表格,再通过
pivot转换为行列对应的宽格式表格,符合常规的表格展示需求。
内容的提问来源于stack exchange,提问作者jw32001
相关产品推荐
相关产品推荐

