如何基于Pandas DataFrame两列文本生成对应差异内容列
Pandas DataFrame 整列批量计算文本差异实现方案
核心思路
把单文本对比逻辑封装为可接收两个字符串参数的自定义函数,通过DataFrame的apply方法逐行调用即可实现整列批量计算。
完整实现代码
1. 导入依赖库
import pandas as pd import difflib
2. 封装文本差异计算函数
def calculate_diff(text1: str, text2: str) -> str: differ = difflib.Differ() # 字符级细粒度对比,如需单词级对比可改为 text1.split() / text2.split() diff_result = differ.compare(list(text1), list(text2)) del_content = [] add_content = [] for item in diff_result: # - 开头为Text1有、Text2无的内容 if item.startswith('- '): del_content.append(item[2:]) # + 开头为Text2有、Text1无的内容 elif item.startswith('+ '): add_content.append(item[2:]) # 输出规则和示例保持一致:优先返回删除内容,无删除内容则返回新增内容 if del_content: return ''.join(del_content).strip() elif add_content: return ''.join(add_content).strip() return ''
3. 批量应用到DataFrame
# 构造测试数据,可替换为你读取Excel/CSV的逻辑 df = pd.DataFrame({ 'Text1': ['This is Mango. This is Banana', 'This is Mango.'], 'Text2': ['This is Banana', 'This is Mango, Banana'] }) # 逐行计算生成Change列 df['Change'] = df.apply(lambda row: calculate_diff(row['Text1'], row['Text2']), axis=1)
可选优化
- 单词级对比:将函数内的
list(text1)改为text1.split()、list(text2)改为text2.split(),返回时改为' '.join(xxx)即可 - 大体积数据提速:安装
swifter库后,将df.apply替换为df.swifter.apply可自动调用多核并行计算,大幅提升处理速度 - 差异结果标记:如需区分新增/删除内容,可调整返回逻辑,比如返回
f"删除:{''.join(del_content)} 新增:{''.join(add_content)}"
内容的提问来源于stack exchange,提问作者Sumant W W
相关产品推荐
相关产品推荐

