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

如何在Python中清洗DataFrame的RTF值并合并关联行?

解决方案

1. RTF格式文本提取纯文本

别手动写正则硬怼RTF标记,这类需求用专门的RTF解析库更靠谱,能避免漏处理嵌套标记或特殊格式。推荐用striprtf库:

  • 先安装依赖:
pip install striprtf
  • 编写批量清洗函数:
from striprtf.striprtf import rtf_to_text
import pandas as pd

def clean_rtf(text):
    # 处理空值或非字符串类型
    if pd.isna(text) or not isinstance(text, str):
        return ""
    # 转纯文本后,额外清理残留的格式标记(striprtf通常会自动处理,保险起见再加一层)
    plain_text = rtf_to_text(text)
    plain_text = plain_text.replace(r"\par", "").replace(r"\tab", "")
    # 去除多余换行和空格
    return ' '.join(plain_text.split())

# 应用到DataFrame的Text列
df['Text'] = df['Text'].apply(clean_rtf)

2. 按TEXTID合并拆分文本行

用pandas原生的groupby+agg操作,比逐行循环拼接高效N倍,适合大数据量场景:

# 按TEXTID分组合并Text列(如果有行顺序要求,先按行号排序,比如假设有序列号列RowNum)
# 若无行号,直接按原顺序合并
df_merged = df.groupby('TEXTID')['Text'].agg(' '.join).reset_index()

# 如果需要保留其他列信息,比如取每组第一行的其他列值:
df_merged = df.groupby('TEXTID').agg({
    'Text': ' '.join,
    '其他列1': 'first',
    '其他列2': 'first'
}).reset_index()

完整流程示例

# 假设已从Oracle读取到DataFrame df
import pandas as pd
from striprtf.striprtf import rtf_to_text

def clean_rtf(text):
    if pd.isna(text) or not isinstance(text, str):
        return ""
    plain_text = rtf_to_text(text)
    plain_text = plain_text.replace(r"\par", "").replace(r"\tab", "")
    return ' '.join(plain_text.split())

# 清洗RTF文本
df['Text'] = df['Text'].apply(clean_rtf)

# 合并同一TEXTID的行
df_final = df.groupby('TEXTID')['Text'].agg(' '.join).reset_index()

# 查看结果
print(df_final.head())

方案优势

  • RTF解析:striprtf是专门处理RTF的工具,比手动正则更健壮,能搞定复杂嵌套标记、特殊字符等场景;
  • 合并操作:pandas原生groupby是向量化操作,性能远高于循环拼接,轻松应对百万级数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:52:19