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

如何在Pandas DataFrame中拆分多值行生成独立关联行

解决Pandas DataFrame多值列拆分为独立行的问题

针对你遇到的爬虫DataFrame中部分行包含多个链接、需拆分并关联对应News_ID的需求,用分隔符拆分容易出问题,推荐以下可靠方法:

核心思路

  1. 转字符串列表为实际列表:你的twitter_link列存的是字符串形式的列表(比如"['url1', 'url2']"),先转换成Python原生列表,让Pandas能识别处理。
  2. 拆分列表为多行:用Pandas的explode()方法,把列表里的每个元素拆成单独一行,同时保留对应的News_ID。
  3. 清理无效行:原始数据里的空列表([])转成列表后是空值,拆分后会生成无效行,最后过滤掉这些行。

完整代码示例

import pandas as pd
import ast

# 对应你提供的原始数据
data = {
    'News_ID': {0: 'gfc_1', 1: 'gfc_2', 2: 'gfc_3', 3: 'gfc_4', 4: 'gfc_5'},
    'twitter_link': {
        0: "['https://twitter.com/im__samarth/status/1530248663959994369', 'https://twitter.com/mizsayani/status/1530532694685143041']",
        1: "['https://twitter.com/Magaraja2021/status/1714892770593456227', 'https://web.archive.org/web/20231020045756/https://twitter.com/Magaraja2021/status/1714892770593456227','https://twitter.com/youm7/status/901162082376220672']",
        2: '[]',
        3: '[]',
        4: '[]'
    }
}
df = pd.DataFrame(data)

# 1. 把字符串形式的列表转成原生列表
df['twitter_link'] = df['twitter_link'].apply(ast.literal_eval)

# 2. 拆分列表为多行
df_exploded = df.explode('twitter_link')

# 3. 过滤空值/空字符串的无效行
df_exploded = df_exploded[df_exploded['twitter_link'].notna() & (df_exploded['twitter_link'] != '')]

# 输出成你要的格式
print(df_exploded.to_csv(index=False, quotechar='"'))

最终输出

执行后会得到符合预期的结果:

News_ID,twitter_link
gfc_1,"https://twitter.com/im__samarth/status/1530248663959994369"
gfc_1,"https://twitter.com/mizsayani/status/1530532694685143041"
gfc_2,"https://twitter.com/Magaraja2021/status/1714892770593456227"
gfc_2,"https://web.archive.org/web/20231020045756/https://twitter.com/Magaraja2021/status/1714892770593456227"
gfc_2,"https://twitter.com/youm7/status/901162082376220672"

这个方法比分隔符拆分更稳定,就算链接里包含逗号等特殊字符也不会出错,后续如果有其他多值列,只需对对应列重复explode操作即可适配多列场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:43:13