Pandas拼接文本列时如何自动为缺失句号的内容补全句点
Pandas拼接文本列时自动补全缺失句点
使用Pandas拼接DataFrame两列文本时,需要仅对末尾缺失句号的文本自动补全句点,避免出现重复标点、空值拼接出多余符号的问题,直接硬拼接句号的写法无法得到符合预期的结果。
测试复现代码
# 导入依赖库 import pandas as pd import numpy as np # 构造测试数据 data = [['text with a period.', '111A.'], ['text without a period', '222B'], ['text with many periods...', '333C'], [np.NaN, '333C'], [np.NaN, np.NaN]] # 生成测试DataFrame df = pd.DataFrame(data, columns=['text1', 'text2']) # 原有错误拼接写法 combined_df=df.copy() combined_df["combined_text"]=df["text1"].fillna("") + ". " + df["text2"].fillna("") + '.' combined_df
预期效果
各行拼接后的combined_text列结果如下:
- 两列自带句号的行:
text with a period. 111A. - 两列都无句号的行:
text without a period. 222B. - 第一列多句号结尾、第二列无句号的行:
text with many periods... 333C. - 第一列为空、第二列无句号的行:
333C. - 两列全空的行:空字符串
原有写法的问题是不管文本末尾有没有句号都强行加标点,会出现重复点号,空值位置会生成多余的孤立句号、冗余空格。
解决方案
先实现单段文本的句号补全逻辑:非空文本末尾无句号则补全,空值统一返回空串;两列分别处理完后再拼接,自动清理首尾多余空格、重复末尾点号即可。
def add_period_if_missing(content): content = str(content).strip() # 空值/空字符串直接返回空 if content in ("", "nan", "None"): return "" # 末尾无句号则补全,有句号(含多句号结尾)直接返回 return content if content.endswith(".") else content + "." combined_df = df.copy() # 分别处理两列的句号 processed_t1 = df["text1"].apply(add_period_if_missing) processed_t2 = df["text2"].apply(add_period_if_missing) # 拼接后清理冗余空格、统一修正末尾重复点号 combined_df["combined_text"] = (processed_t1 + " " + processed_t2).str.strip().str.replace(r"\.+$", ".", regex=True)
运行后结果完全匹配预期:
- 自带末尾句号(含多句号结尾)的文本不会重复添加标点
- 缺失句号的文本自动补全末尾句点
- 单列/双列为空值的行不会生成多余空格、孤立句号
- 两列拼接处的分隔符自然,无连续点号问题
内容的提问来源于stack exchange,提问作者gracenz
相关产品推荐
相关产品推荐

