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

如何筛选Pandas唯一结果中的非数值型值?

筛选Pandas Series中的非数值型唯一值

问题描述

我有一个Pandas Series,调用.unique()方法获取所有唯一值后,尝试筛选出仅包含非数值型的唯一值,执行代码时出现以下错误:

AttributeError: 'float' object has no attribute 'isnumeric'

报错代码:

values = data['Column Name'].unique()
non_numeric_values = [value for value in values if not value.isnumeric()] # 报错行

需要解决的问题:

  1. 如何实现筛选仅非数值型值的目标?
  2. 该列可能为object dtype,值可能是字符串类型。

解决方案

报错原因

报错是因为Series中存在float类型的值(比如空值NaN会被自动转为float),而float对象没有isnumeric()方法——这个方法仅适用于字符串类型。

方法1:统一转字符串后判断(简单直接)

先把所有值转为字符串,再做数值判断,同时按需处理空值:

import pandas as pd

values = data['Column Name'].unique()
non_numeric_values = [
    value for value in values 
    if not (str(value).isnumeric() or pd.isna(value))
]
  • str(value)确保所有值都转为字符串,避免float类型报错
  • pd.isna(value)用于排除空值(如果需要保留空值,直接去掉这个判断条件即可)

方法2:用Pandas内置函数(高效稳妥)

如果数据量较大,列表推导式效率偏低,推荐用Pandas的to_numeric函数处理:

import pandas as pd

# 将唯一值转为Series
unique_series = pd.Series(data['Column Name'].unique())
# 把无法转为数值的内容标记为NaN,再筛选原Series中对应非NaN的内容
non_numeric_values = unique_series[pd.to_numeric(unique_series, errors='coerce').isna()].tolist()
  • pd.to_numeric(..., errors='coerce')会将所有无法转为数值的内容转为NaN
  • 筛选原Series中对应位置不为NaN的值,就是我们要的非数值型唯一值
  • 这个方法自动兼容字符串、数值、空值等各种类型,适用性更广

方法3:精细类型判断(按需选择)

如果需要区分纯数字字符串和真正的数值类型(比如要排除"123"但保留"123a"),可以用类型判断结合字符串检查:

import pandas as pd

values = data['Column Name'].unique()
non_numeric_values = []
for value in values:
    if pd.isna(value):
        continue  # 按需决定是否保留空值
    # 排除数值类型(int/float)
    if isinstance(value, (int, float)):
        continue
    # 排除纯数字字符串
    if isinstance(value, str) and value.isnumeric():
        continue
    non_numeric_values.append(value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:50:39