如何用Pandas筛选Cuenta列第3-4位为05的数据行?
解决DataFrame筛选Cuenta列第3、4位为"05"的问题
问题分析
你原代码里的正则表达式..05*存在两个关键错误:
5*表示匹配0个或多个5,不是匹配后续任意字符,不符合需求;- 没有用
^锚定字符串开头,会导致匹配到字符串中间出现xx05的情况,无法精准限定第3、4位。
两种可行解决方案
方案一:字符串切片(推荐,简单高效)
直接截取Cuenta列每个值的第3-4位(Python字符串索引从0开始,对应切片[2:4]),判断是否等于"05":
# 先确保Cuenta列是字符串类型(如果原本是数字的话) df['Cuenta'] = df['Cuenta'].astype(str) # 筛选目标行 result = df[df['Cuenta'].str[2:4] == '05']
方案二:修正正则表达式
使用^锚定开头,用.{2}匹配前两个任意字符,再精准匹配"05",确保第3、4位是目标值:
df['Cuenta'] = df['Cuenta'].astype(str) pattern = r'^.{2}05' result = df[df['Cuenta'].str.contains(pattern)]
筛选结果
两种方法都会得到符合要求的行:
| Año | Periodo | Cuenta |
|---|---|---|
| 2023 | 1 | 51050300 |
| 2023 | 2 | 51053900 |
| 2023 | 6 | 51050300 |
| 2023 | 7 | 51050600 |
内容的提问来源于stack exchange,提问作者Aleja Gallo
相关产品推荐
相关产品推荐

