Pandas整列字符串替换:保留首个下划线,其余替换为句号的问题
解决方案
针对你的需求——保留字符串中第一个下划线,将后续所有下划线替换为句号,这里提供两种可行方法:
方法1:分割拼接法
利用字符串分割(仅分割一次)和替换结合,逻辑直观易懂:
df1['Client'] = df1['Client'].apply( lambda x: x.split('_', 1)[0] + '_' + x.split('_', 1)[1].replace('_', '.') )
x.split('_', 1)会把字符串从第一个下划线处切开,得到类似['client', '19_Aug_21_22_2022']的列表- 第一部分保留原格式,第二部分将所有下划线替换为句号后,和第一部分用下划线拼接
方法2:正则表达式法
通过正则匹配第一个下划线之后的所有下划线,精准替换:
df1['Client'] = df1['Client'].str.replace(r'(?<=_.*)_', '.', regex=True)
- 正则
(?<=_.*)_是正向断言,意思是"匹配前面已经出现过至少一个下划线的下划线",也就是第一个下划线之后的所有目标字符 - 直接用
str.replace批量处理整列,无需apply
为什么你之前的写法不对?
'_'[:1]等价于'_',所以会替换字符串中所有下划线,不符合需求'_'[1]会报错是因为下划线字符串长度为1,索引1超出范围'_'[1:]是空字符串,str.replace替换空字符串时,会在每个字符之间插入替换内容,导致出现"每个字符后插点"的异常结果
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

