如何从DataFrame列提取字典列表并生成结构化DataFrame?
解决方案
可以通过 pandas 的 explode + json_normalize 组合快速实现需求,以下是具体步骤和代码示例:
1. 拆分列表为单行字典
先用 explode 把 row 列中每个列表拆成单独行,让每个字典占据一行:
exploded_df = df.explode('row', ignore_index=True)
2. 解析字典为结构化字段
用 json_normalize 将字典列直接解析成多列的结构化DataFrame:
structured_df = pd.json_normalize(exploded_df['row'])
3. 字段重命名(可选)
如果需要把原字典里的 acceleration 改成 acc 这类自定义字段名,用 rename 方法:
structured_df = structured_df.rename(columns={ 'acceleration': 'acc', # 其他需要重命名的字段按需添加 })
4. 按video_second排序
最后用 sort_values 按 video_second 字段排序,同时重置索引:
final_df = structured_df.sort_values('video_second').reset_index(drop=True)
合并成一行简化代码
如果不需要保留中间步骤,可以把流程合并成链式调用:
final_df = ( df.explode('row', ignore_index=True) .pipe(lambda x: pd.json_normalize(x['row'])) .rename(columns={'acceleration': 'acc'}) .sort_values('video_second') .reset_index(drop=True) )
注意事项
如果原始DataFrame除了row列还有其他需要保留的关联字段(比如主表的标识id),在explode后不要丢弃,解析时可以合并:
exploded_df = df.explode('row', ignore_index=True) structured_df = pd.concat([ exploded_df.drop('row', axis=1), pd.json_normalize(exploded_df['row']) ], axis=1)
内容的提问来源于stack exchange,提问作者Altan Halıgür
相关产品推荐
相关产品推荐

