如何将嵌套结构的JSON字典转换为Pandas DataFrame
解决嵌套数据转Pandas DataFrame的问题
我明白你遇到的问题了——这种嵌套的字典结构确实容易在遍历的时候踩坑,咱们一步步来拆解解决它。
首先,先明确你的数据结构:raw_data['rows']['data'] 是一个列表,其中每个元素又是一个字典列表,每个字典包含column_name(列标题)和row_value(对应列的数据)。比如完整的数据大概是这样:
raw_data = { 'rows': { 'data': [ [{'column_name': 'name', 'row_value': 'Alice'}, {'column_name': 'age', 'row_value': 25}], [{'column_name': 'name', 'row_value': 'Bob'}, {'column_name': 'age', 'row_value': 30}] ] } }
你的原代码问题所在
你之前的代码:
df = pd.DataFrame(data=[data_rows['row_value'] for data_rows in raw_data['rows']['data']], columns=['column_name'])
有两个核心问题:
raw_data['rows']['data']的每个元素是一个列表(比如上面例子中的[{'name': 'Alice'}, {'age':25}]),不是单个字典,所以data_rows['row_value']会直接报错——列表没有row_value这个键。- 你手动指定了
columns=['column_name'],但实际列标题应该从每个字典的column_name字段动态提取,而不是固定值。
正确的实现方案
我们需要先把每一行的字典列表转换成一个完整的行字典(键为列名,值为对应数据),再把所有行字典传给pd.DataFrame()。具体代码如下:
import pandas as pd # 假设你的原始数据是raw_data processed_rows = [] # 遍历每一行的嵌套字典列表 for row_items in raw_data['rows']['data']: # 将当前行的所有字典转换为一个键值对字典 row_dict = {item['column_name']: item['row_value'] for item in row_items} processed_rows.append(row_dict) # 生成DataFrame df = pd.DataFrame(processed_rows)
用上面的示例数据运行后,得到的DataFrame会是:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
简化写法(一行式)
如果你喜欢更简洁的代码,可以用列表推导式直接生成所有行字典:
df = pd.DataFrame([{item['column_name']: item['row_value'] for item in row} for row in raw_data['rows']['data']])
这样就能完美把嵌套结构转换成你需要的DataFrame了。
内容的提问来源于stack exchange,提问作者Jack Gruber
相关产品推荐
相关产品推荐

