如何在Python的pandas DataFrame中删除字符串列末尾的字母字符
解决方案
你可以直接使用pandas内置的字符串处理方法搭配正则实现需求,不需要额外单独调用re库方法:
方案1:严格按字面需求实现(所有末尾为字母的字符串都删除最后一位)
代码如下:
import pandas as pd data = {'postcode': ['DG14','EC3M','BN45','M2','WC2A','W1C','PE35'], 'total':[44, 54,56, 78,87,35,36]} df = pd.DataFrame(data) # 核心处理逻辑:匹配末尾的字母,替换为空 df['postcode'] = df['postcode'].str.replace(r'[A-Za-z]$', '', regex=True) print(df)
输出结果:
postcode total 0 DG14 44 1 EC3 54 2 BN45 56 3 M2 78 4 WC2 87 5 W1 35 6 PE35 36
方案2:匹配你给出的示例期望结果(仅4位长度字符串的末尾字母才删除)
如果你的真实需求是仅4位长度的邮编才删除末尾字母,保留3位长度邮编的末尾字母,可以用带断言的正则实现,输出和你给出的期望完全一致:
import pandas as pd data = {'postcode': ['DG14','EC3M','BN45','M2','WC2A','W1C','PE35'], 'total':[44, 54,56, 78,87,35,36]} df = pd.DataFrame(data) # 核心处理逻辑:仅匹配4位字符串末尾的字母,替换为空 df['postcode'] = df['postcode'].str.replace(r'(?<=^.{3})[A-Za-z]$', '', regex=True) print(df)
输出结果:
postcode total 0 DG14 44 1 EC3 54 2 BN45 56 3 M2 78 4 WC2 87 5 W1C 35 6 PE35 36
正则说明
[A-Za-z]:匹配任意大小写英文字母$:限定匹配位置在字符串的末尾(?<=^.{3}):正向回顾断言,限定匹配的字符前方必须是从开头数的3个字符,即整个字符串总长度为4
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

