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

Pandas如何删除指定列值为纯数字的行?解决报错及边缘场景

解决Pandas删除指定列纯数字行的报错问题

问题分析

你遇到的TypeError: bad operand type for unary ~: 'float',根源是Age列混合了字符串和数值类型:调用str.contains()时,数值类型的行会返回NaN(float类型),而~操作符无法直接作用于float类型的NaN,因此触发报错。

另外原代码的正则r'\d'会匹配所有包含数字的内容,不符合你保留'4chan'这类带数字的字符串、只删除纯数字行的需求。

解决方案

先将目标列统一转为字符串类型,再用正则匹配纯数字的行(正则表达式用r'^\d+$',表示从开头到结尾全是数字),最后过滤掉这些行。

代码示例

处理初始数据

import pandas as pd

# 初始数据
data = [['tom', 'Ten'], ['nick', 'Fifteen'], ['juli', 14]]
df = pd.DataFrame(data, columns=['Name', 'Age'])

# 1. 转字符串类型 2. 匹配纯数字行并过滤
df = df[~df['Age'].astype(str).str.match(r'^\d+$')]

print(df)

输出结果:

Name     Age
0    tom     Ten
1   nick  Fifteen

处理边缘场景数据

import pandas as pd

# 边缘场景数据
data = [['tom', 'Ten'], ['nick', 'Fifteen'], ['juli', '4chan'], ['astha', 18]]
df = pd.DataFrame(data, columns=['Name', 'Age'])

df = df[~df['Age'].astype(str).str.match(r'^\d+$')]

print(df)

输出结果:

Name     Age
0    tom     Ten
1   nick  Fifteen
2   juli   4chan

关键说明

  • astype(str):把Age列所有值转为字符串,避免数值类型导致的NaN问题。
  • str.match(r'^\d+$'):严格匹配纯数字的字符串,^表示开头,$表示结尾,\d+表示一个或多个数字,确保只有完全由数字组成的内容会被匹配。
  • ~:对布尔序列取反,保留非纯数字的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:52:17