如何在Pandas DataFrame中处理含多下划线的字符串列?
处理Pandas DataFrame中EVENT_DTL列的字符串规则转换
核心逻辑
针对EVENT_DTL列里用|分隔的每个子串:
- 下划线数量≤2:保留原内容
- 下划线数量>2:移除最后一个下划线及其后的所有字符
具体实现代码
1. 单个子串处理函数
先封装处理单个子串的逻辑,方便复用和调试:
def clean_substring(sub): underscore_count = sub.count('_') if underscore_count > 2: # 定位最后一个下划线的位置,截取前半部分 return sub[:sub.rfind('_')] return sub
2. 整列数据处理方案
方案一:逐行apply处理(直观易读)
适合中小规模数据,逻辑清晰易懂:
import pandas as pd # 假设你的DataFrame名为df def process_event_col(val): # 兼容空值或非字符串类型,避免报错 if pd.isna(val) or not isinstance(val, str): return val # 分割子串→逐个清理→重新拼接 parts = val.split('|') cleaned_parts = [clean_substring(part) for part in parts] return '|'.join(cleaned_parts) # 应用到目标列 df['EVENT_DTL'] = df['EVENT_DTL'].apply(process_event_col)
方案二:向量化处理(高效适配大数据)
针对10000行的规模,用向量化方法能提升处理效率:
# 拆分列→批量清理子串→重新聚合为原格式 df['EVENT_DTL'] = (df['EVENT_DTL'] .str.split('|', expand=True) # 按|拆分为多列 .applymap(clean_substring) # 对每个元素执行清理 .agg('|'.join, axis=1)) # 按行重新拼接成字符串
效果验证
比如输入子串Pesticide_Spreading agent_Kava_999,经过处理后会返回Pesticide_Spreading agent_Kava;若子串下划线数量≤2(如Test_Example),则直接保留原内容。
内容的提问来源于stack exchange,提问作者Chung Joshua
相关产品推荐
相关产品推荐

