Pandas如何不逐行遍历删除字符串列中的重复拼接子串
Pandas 重复字符串半段截取方案
你遇到的字符串规律统一:所有待处理值都是目标结果完整重复2次拼接得到,直接使用Pandas内置向量化字符串接口即可完成处理,全程无需逐行for循环,处理性能远高于逐行遍历。
核心实现
假设待处理列名为ticker,所属DataFrame为df,处理代码仅需1行:
df['clean_ticker'] = df['ticker'].str[:df['ticker'].str.len()//2]
实现逻辑
- 调用
df['ticker'].str.len()向量化计算每行字符串的总长度:由于字符串是目标结果重复2次拼接而成,总长度必然为偶数,整除2即可得到每行目标结果的对应长度 - 调用Pandas字符串切片语法
str[:n],按每行计算得到的半长截取前半段内容,直接输出目标结果
效果验证
所有测试场景均能得到预期输出:
- 原值
XOMXOM:总长度6,半长3,输出XOM - 原值
ZMZM:总长度4,半长2,输出ZM - 原值
AAPLAAPL:总长度8,半长4,输出AAPL - 长测试值
ABCDEFGHIJABCDEFGHIJ:总长度20,半长10,输出ABCDEFGHIJ
异常值兼容(可选)
如果数据源可能存在不符合「双次重复」规律的脏数据,可以增加校验逻辑,对不满足规则的值标记为空值,避免错误截取:
import pandas as pd s = df['ticker'] half_len = s.str.len() // 2 # 校验前半段与后半段是否完全一致 valid_flag = s.str[:half_len] == s.str[half_len:] df['clean_ticker'] = s.str[:half_len].where(valid_flag, pd.NA)
内容的提问来源于stack exchange,提问作者wildcat89
相关产品推荐
相关产品推荐

