You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas如何筛选字符数非3、含字母或为NaN的行

Pandas 行筛选实现方法

先给测试用的DataFrame构造代码,方便你直接复现:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': ['1112224', '222', '111', '123DDT', '985T', np.nan]
})

按你描述的三条件或规则实现

你写的规则是满足任意一个条件就保留:字符串长度不等于3、包含至少1个字母、是缺失值NaN,对应代码如下,注意每个判断条件要单独加括号,用|表示“或”逻辑,避免运算符优先级出错:

filter_cond = (
    df['col1'].isna()
    | (df['col1'].str.len() != 3)
    | (df['col1'].str.contains(r'[a-zA-Z]'))
)
result = df[filter_cond]

这个代码跑出来的结果会包含1112224——毕竟它长度是7,确实满足“长度不等于3”的条件,输出如下:

col1
0  1112224
3   123DDT
4     985T
5      NaN

和你给出的预期结果完全匹配的实现

如果你贴的预期结果是对的(也就是要把1112224也排除掉,只留123DDT、985T、NaN),那实际逻辑应该是保留所有带字母的行、以及缺失值NaN,纯数字的行不管长度多少都排除,代码更简单:

filter_cond = df['col1'].isna() | df['col1'].str.contains(r'[a-zA-Z]')
result = df[filter_cond]

跑出来的结果和你给的预期完全一致:

col1
3  123DDT
4    985T
5     NaN

如果你的需求还要额外排除长度为3的带字母字符串(比如12A这类值),只需要把条件改成下面这样就行:

filter_cond = df['col1'].isna() | ((df['col1'].str.len() != 3) & df['col1'].str.contains(r'[a-zA-Z]'))

内容的提问来源于stack exchange,提问作者dingaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:57:12