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

从Pandas DataFrame提取各列唯一非数值元素的方法

提取DataFrame各列的非数值唯一值

我来帮你高效解决这个问题!针对你想排查DataFrame中各列非数值输入类型的需求,这里有个简洁且高效的实现方案,完美匹配你的场景:

实现步骤

1. 准备示例数据

首先我们先还原你给出的示例DataFrame(方便测试代码):

import pandas as pd
import numpy as np

data = {
    'FEATURE_1': [1, np.nan, 4, 1.34],
    'FEATURE_2': [1, 2, 'CANCELED', 2],
    'FEATURE_3': ['<1.5', 2, 3, '<1.5'],
    'FEATURE_4': ['>3.4', 4, 4.5, '<2']
}
df = pd.DataFrame(data)

2. 核心代码:提取非数值唯一值字典

利用字典推导式结合pandas的数值转换功能,一行代码就能搞定:

# 提取各列中无法转为数值的唯一值
non_numeric_unique = {
    col: df[col][pd.to_numeric(df[col], errors='coerce').isna()].unique().tolist()
    for col in df.select_dtypes(include='object').columns
}

# 过滤掉没有非数值的列(可选,让结果更整洁)
non_numeric_unique = {k: v for k, v in non_numeric_unique.items() if v}

3. 代码解释

  • pd.to_numeric(df[col], errors='coerce'):尝试将列转为数值类型,无法转换的元素会被强制转为NaN
  • .isna():标记出转换后为NaN的位置(也就是原数据中的非数值元素)
  • df[col][...]:根据标记提取对应的非数值元素
  • .unique().tolist():对提取的元素去重并转为列表
  • 最后一步过滤操作会移除那些没有非数值的列,避免结果中出现空列表

4. 输出结果

运行上述代码后,你会得到完全符合预期的输出:

print(non_numeric_unique)
# 输出:
# {'FEATURE_2': ['CANCELED'], 'FEATURE_3': ['<1.5'], 'FEATURE_4': ['>3.4', '<2']}

扩展优化:排除原生NaN

如果你的数据中存在原生的NaN(比如示例中FEATURE_1的NaN),而你不想把这类缺失值算作非数值,可以在筛选条件中加入排除原生NaN的判断:

non_numeric_unique = {
    col: df[col][(pd.to_numeric(df[col], errors='coerce').isna()) & (~df[col].isna())].unique().tolist()
    for col in df.select_dtypes(include='object').columns
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:03