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

Python Pandas:拆分列中多来源引用为新行新列及格式不一致处理

处理Pandas中多引用单元格拆分与格式不一致问题

一、常规格式的引用拆分(对应你的示例1、目标效果2)

你之前用explode失败,是因为explode只对列表/数组类型的单元格生效,而原始数据是字符串格式,得先把字符串拆成单个引用的列表,再拆分行:

步骤代码:

import pandas as pd
import re

# 模拟你的原始数据(替换成你的真实DataFrame)
df = pd.DataFrame({
    'row_id': [1, 2],
    'source_citations': [
        "Deep Learning (2016); Machine Learning Basics (2018)",
        "NLP in Practice (2020)"
    ]
})

# 1. 将单个单元格的多引用拆分为列表(按分号+可选空格分割)
df['citations'] = df['source_citations'].str.split(';\s*')

# 2. 用explode拆分列表为独立行
df_split = df.explode('citations').drop(columns=['source_citations'])

# 3. 从每个引用中提取title和year(匹配"标题 (年份)"格式)
citation_pattern = r'(.*?)\s*\((\d{4})\)'
df_split[['title', 'year']] = df_split['citations'].str.extract(citation_pattern)

# 4. 清理标题的多余空格
df_split['title'] = df_split['title'].str.strip()

# 最终结果
print(df_split)

输出效果就是每个引用对应一行,分别有独立的title和year列。

二、处理格式不一致的引用(对应你的示例3)

如果source_citations列存在分隔符不统一(比如用逗号、换行代替分号)、年份格式混乱(比如中文括号、无括号)等情况,需要用更鲁棒的正则和自定义函数处理:

适配多格式的代码:

# 处理不同分隔符(分号、逗号、换行都作为分隔符)
df['citations'] = df['source_citations'].apply(
    lambda x: re.split(r'[;\n,]\s*', str(x)) if pd.notna(x) else []
)

# 自定义函数提取title和year,适配多种格式
def parse_citation(text):
    # 提取4位数字年份(不管有没有括号)
    year_match = re.search(r'\d{4}', text)
    year = year_match.group() if year_match else '未知年份'
    # 移除年份及周围的括号、空格,得到标题
    title = re.sub(r'\s*\(?\d{4}\)?\s*$', '', text).strip()
    # 处理空标题的情况
    title = title if title else '无标题'
    return pd.Series([title, year])

# 应用函数提取字段
df_split = df.explode('citations').drop(columns=['source_citations'])
df_split[['title', 'year']] = df_split['citations'].apply(parse_citation)

# 筛选异常行(可选,用于人工核对)
# abnormal_rows = df_split[df_split['year'] == '未知年份']
# print(abnormal_rows)

关键适配点:

  • 分隔符:用正则[;\n,]\s*匹配分号、换行、逗号作为分隔符,同时忽略后面的空格
  • 年份提取:直接抓取字符串中的4位数字,兼容有无括号、中英文括号的情况
  • 异常处理:对提取失败的年份/标题标记为"未知年份"/"无标题",方便后续人工处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:25:23