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

如何用Pandas删除含4位小数或5位整数的DataFrame行?

删除DataFrame中含特定格式数值的行

要删除gbs2中包含4位小数(如1.2345)或5位整数(如12345)的行,核心是用正则表达式匹配目标格式的数值,再定位并删除对应行。以下是具体实现:

步骤1:明确正则匹配规则

针对两种目标格式,构造正则表达式:

  • 4位小数:\d+\.\d{4} → 匹配任意数字开头,后跟小数点和4位数字的模式
  • 5位整数:\b\d{5}\b → 匹配独立的5位数字(用单词边界\b避免匹配更长数字的子串)

将两者组合为:r'(\d+\.\d{4}|\b\d{5}\b)'

步骤2:定位需删除的行

对Produced Qty列使用str.contains()方法匹配正则,得到标记需删除行的布尔序列:

import pandas as pd

# 原数据构造
name = pd.Series(['Product A', 'Product B', 'Product C'])
Produced_Qty = pd.Series(['ABC 1.407', 'NOP 1.6345', 'XYZ 1.3144/1.7523 ect'])
Passed_Qty = pd.Series([499768, 756662, 301297])

gbs2 = pd.DataFrame({'Name':name,
                     'Produced Qty': Produced_Qty,
                     'Passed Qty':Passed_Qty})

# 生成匹配标记
mask = gbs2['Produced Qty'].str.contains(r'(\d+\.\d{4}|\b\d{5}\b)', regex=True)

步骤3:删除目标行

可以通过两种方式实现:

方式一:直接过滤保留符合要求的行(更简洁)

gbs2_filtered = gbs2[~mask]

方式二:使用drop()方法删除行

# 获取需删除的行索引
drop_indices = gbs2[mask].index
gbs2_filtered = gbs2.drop(drop_indices)

结果验证

处理后gbs2_filtered仅保留Product A的行,符合需求。该方案不受字符串长度、数值位置的影响,只要字符串中存在目标格式的数值,就会被准确定位并删除。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:01:21