You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Telegram导出JSON数据中扁平化嵌套text字段?

Telegram导出JSON文本字段扁平化方案

针对Telegram导出JSON数据中text字段同时存在字符串和嵌套列表的情况,可通过以下步骤实现扁平化拆分:

  1. 统一文本格式为列表
    将单一字符串格式的text转为单元素列表,确保所有text内容都是列表结构,方便后续处理:

    df['text_list'] = df['messages'].apply(
        lambda msg: [msg['text']] if isinstance(msg['text'], str) else msg['text']
    )
    
  2. 提取列表元素的纯文本
    遍历列表中的每个元素:如果是字典则提取text值,如果是字符串直接保留:

    df['clean_text'] = df['text_list'].apply(
        lambda lst: [item['text'] if isinstance(item, dict) else item for item in lst]
    )
    
  3. 拆分列表为独立行
    使用Pandas的explode方法将列表中的每个元素拆分为单独一行,同时重置索引:

    df_flattened = df.explode('clean_text').reset_index(drop=True)
    

完整示例代码

import pandas as pd

# 读取Telegram导出的JSON为DataFrame(示例)
df = pd.read_json('telegram_export.json')

# 处理text字段并扁平化
df['text_list'] = df['messages'].apply(
    lambda msg: [msg['text']] if isinstance(msg['text'], str) else msg['text']
)
df['clean_text'] = df['text_list'].apply(
    lambda lst: [item['text'] if isinstance(item, dict) else item for item in lst]
)
df_flattened = df.explode('clean_text').reset_index(drop=True)

# 按需保留原数据中的其他字段(如发送日期、发送者等)
final_df = df_flattened[['date', 'from', 'clean_text']]

注意事项

  • 如果你的DataFrame中text是直接作为列存在(而非嵌套在messages字典里),只需将代码中的msg['text']替换为msg即可。
  • 若字典中除text外还有其他需要保留的字段(如type),可修改提取逻辑,比如同时保留type和text:
    df['clean_text'] = df['text_list'].apply(
        lambda lst: [{'type': item.get('type'), 'text': item['text']} if isinstance(item, dict) else {'type': 'text', 'text': item} for item in lst]
    )
    

内容的提问来源于stack exchange,提问作者us817263fa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:20:46