如何在Python Pandas中删除指定列数值长度不为11位的观测行
解决方案
基础实现(仅校验长度)
首先建议先将col1统一转为字符串类型,避免数字类型存储时开头的0被省略导致长度计算错误,之后直接按字符串长度筛选即可:
import pandas as pd # 1. 转换col1为字符串类型 df['col1'] = df['col1'].astype(str) # 2. 仅保留长度为11的行 df = df[df['col1'].str.len() == 11]
如果你想直接修改原DataFrame,也可以用drop方法实现:
df.drop(df[df['col1'].str.len() != 11].index, inplace=True)
进阶实现(同时校验11位纯数字)
如果需要同时满足「长度11位」+「纯数字」的凭证规则,可以用正则匹配筛选:
df = df[df['col1'].astype(str).str.match(r'^\d{11}$')]
说明:正则
^\d{11}$表示从开头到结尾完全匹配11个数字字符,能同时过滤长度不符、包含非数字字符的异常数据。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

