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

如何将Twitter API采集的引用推文列表字典转为pandas DataFrame列

列拆分实现方案

你遇到的TypeError: string indices must be integers报错,核心原因是Referenced_tweets列存储的是字符串格式的字典列表,并非Python原生的列表/字典对象,直接调用json_normalize处理字符串会触发该报错。

完整实现代码

import pandas as pd
import ast

# 此处替换为你自己的原始数据集读取逻辑,例如读csv的话用pd.read_csv(xxx)
# df = pd.read_csv("你的推文数据文件路径")

# 1. 将字符串格式的引用数据转为Python原生列表字典对象
df['Referenced_tweets'] = df['Referenced_tweets'].apply(ast.literal_eval)

# 2. 定义引用ID提取函数
def extract_reference_id(ref_list):
    # 初始化三个目标列默认值为空
    result = {
        "replied_to": "",
        "quoted": "",
        "retweeted": ""
    }
    ref_type_map = {item["type"]: item["id"] for item in ref_list}
    result.update(ref_type_map)
    return pd.Series(result)

# 3. 应用函数生成三个新列
df[["replied_to", "quoted", "retweeted"]] = df["Referenced_tweets"].apply(extract_reference_id)

# 可选:删除原始引用列
# df = df.drop("Referenced_tweets", axis=1)

补充说明

  • 用ast.literal_eval转换字符串格式的结构化数据,比直接用eval更安全,不会执行恶意代码
  • 如果单条数据存在多个同类型的引用,代码会默认保留最后出现的对应类型ID,完全匹配你给出的样例输出逻辑
  • 不需要额外调用json_normalize,逻辑更简单可控
  • 如果你的数据里存在空值的Referenced_tweets,可以将转换代码修改为:
df['Referenced_tweets'] = df['Referenced_tweets'].apply(lambda x: ast.literal_eval(x) if pd.notna(x) else [])

内容的提问来源于stack exchange,提问作者Michael S Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:45:06