在Pandas DataFrame中处理字符串:将元素内空格替换为下划线
问题描述
我的Pandas DataFrame(df_final)的newa_1列中,索引为8395389的元素值如下:
df_final['newa_1'][8395389] "['Y02T 10/70' 'Y02E 60/00' 'Y02T 90/16' 'Y04S 10/126' 'Y02T 10/7072' 'Y02T 90/12' 'Y02T 90/14']"
需要将每个单引号包裹的元素中任意数量的空格替换为下划线,得到如下结果:
"['Y02T_10/70' 'Y02E_60/00' 'Y02T_90/16' 'Y04S_10/126' 'Y02T_10/7072' 'Y02T_90/12' 'Y02T_90/14']"
解决方案
使用正则表达式精准匹配单引号内的空格并替换,具体实现如下:
单个元素处理
import re # 获取目标元素 target_val = df_final['newa_1'][8395389] # 替换单引号内的任意数量空格为下划线 processed_val = re.sub(r"(?<=')[^']*\s+(?=[^']*')", lambda match: match.group().replace(' ', '_'), target_val) # 写回原DataFrame df_final.loc[8395389, 'newa_1'] = processed_val
整列批量处理
如果需要对整个newa_1列执行相同操作,用apply方法批量处理:
import re df_final['newa_1'] = df_final['newa_1'].apply( lambda x: re.sub(r"(?<=')[^']*\s+(?=[^']*')", lambda match: match.group().replace(' ', '_'), x) )
正则说明
(?<=')[^']*\s+(?=[^']*') 用于定位单引号内部的连续空格:
(?<='):正向预查,确保匹配内容前有单引号[^']*\s+:匹配非单引号字符后接至少一个空格(?=[^']*'):正向预查,确保匹配内容后有单引号
这样就能只替换每个单引号包裹元素里的空格,不会改动元素之间的分隔空格。
内容的提问来源于stack exchange,提问作者Lusian
相关产品推荐
相关产品推荐

