使用pandas json_normalize展平JSON:提取tags.tags并生成扁平化DataFrame
你当前使用pd.json_normalize(data['conversations'])只能展平部分层级,对于tags.tags这类嵌套数组无法完全扁平化,以下是实现完全扁平化DataFrame的方案:
步骤说明
pd.json_normalize默认不会展开嵌套数组,需要先通过explode拆分数组列,再对拆分后的嵌套对象进行二次展平,最终合并所有字段。
完整代码
import pandas as pd # 假设data是你提供的JSON结构数据 # 1. 先展平顶层对话数据(不处理数组列) df = pd.json_normalize(data['conversations']) # 2. 处理tags.tags数组:拆分后展平嵌套字段 df = df.explode('tags.tags', ignore_index=True) df = pd.concat([df.drop('tags.tags', axis=1), pd.json_normalize(df['tags.tags'])], axis=1) # 3. 处理contacts.contacts数组 df = df.explode('contacts.contacts', ignore_index=True) df = pd.concat([df.drop('contacts.contacts', axis=1), pd.json_normalize(df['contacts.contacts'])], axis=1) # 4. 处理teammates.admins数组 df = df.explode('teammates.admins', ignore_index=True) df = pd.concat([df.drop('teammates.admins', axis=1), pd.json_normalize(df['teammates.admins'])], axis=1) # 设置显示所有列 pd.set_option('display.max_columns', None)
效果说明
执行后,所有嵌套层级(包括数组内的对象)都会被展平为独立列:
- 原
tags.tags中的每个tag的id、name、applied_at等字段会变成单独列 - 数组拆分后,每个数组元素对应一行原对话数据(比如一个对话有4个tag,会生成4行数据,每行对应一个tag,同时保留对话的其他属性)
- 其他嵌套数组(如
contacts.contacts、teammates.admins)也会被同样处理
内容的提问来源于stack exchange,提问作者lpca
相关产品推荐
相关产品推荐

