如何在Pandas DataFrame中拆分多值行生成独立关联行
解决Pandas DataFrame多值列拆分为独立行的问题
针对你遇到的爬虫DataFrame中部分行包含多个链接、需拆分并关联对应News_ID的需求,用分隔符拆分容易出问题,推荐以下可靠方法:
核心思路
- 转字符串列表为实际列表:你的
twitter_link列存的是字符串形式的列表(比如"['url1', 'url2']"),先转换成Python原生列表,让Pandas能识别处理。 - 拆分列表为多行:用Pandas的
explode()方法,把列表里的每个元素拆成单独一行,同时保留对应的News_ID。 - 清理无效行:原始数据里的空列表(
[])转成列表后是空值,拆分后会生成无效行,最后过滤掉这些行。
完整代码示例
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
相关产品推荐
相关产品推荐

