Pandas DataFrame中字典数据未拆分至独立列的问题排查
问题分析与解决方案
看起来你在把JSON数据转成Pandas DataFrame时踩了两个关键小坑,我来帮你拆解并修正:
1. 先修正代码里的明显错误
首先看你操作里的两个核心问题:
- 你写了
movedDict = dict['data'],这里dict是Python的内置类型,不是你解析后的字典变量!得先把JSON解析到一个自定义变量(比如data_dict),再从这个变量里取值。 - 你直接对
data对应的字典(里面只有trafficRegistrationPoints一个键,值是数组)调用pd.DataFrame.from_dict,这会把整个数组当成一列的内容,而不是把数组里的每个字典拆成独立行和列。
正确的操作步骤
下面是完整的可运行代码:
import json import pandas as pd # 先处理原字符串里的HTML转义引号("),替换成标准双引号 datasett = ''' { "data": { "trafficRegistrationPoints": [ { "id": "99100B1687283", "name": "Menstad sykkeltellepunkt", "location": { "coordinates": { "latLon": { "lat": 59.173876, "lon": 9.641772 } } } } ] } } ''' datasett_clean = datasett.replace('"', '"') # 解析JSON为Python字典 data_dict = json.loads(datasett_clean) # 提取trafficRegistrationPoints数组(每个元素是一个监测点的完整数据) traffic_points_list = data_dict['data']['trafficRegistrationPoints'] # 把数组转成DataFrame,每个字典的键会自动成为列 df = pd.DataFrame(traffic_points_list) print(df)
2. 展开嵌套的location数据(可选)
如果想把location里的经纬度也拆成独立列,不用手动提取,可以用pd.json_normalize一键扁平化嵌套结构:
df_normalized = pd.json_normalize(traffic_points_list) print(df_normalized)
这样会得到id、name、location.coordinates.latLon.lat、location.coordinates.latLon.lon这些清晰的独立列,更方便后续分析。
错误原因总结
- 变量名误用:你误用了Python内置的
dict类型去取值,这是语法错误,必须用解析后的自定义字典变量(比如data_dict)。 - 数据结构理解偏差:
data对应的字典里,trafficRegistrationPoints是一个数组,你需要提取这个数组再转DataFrame;直接转外层字典会把数组当成单个列的值,自然不会拆分出独立列。
内容的提问来源于stack exchange,提问作者Cmagelssen
相关产品推荐
相关产品推荐

