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

如何验证Pandas DataFrame列是否包含1-9的所有数字?

验证Pandas DataFrame列是否包含1-9所有数字

Pandas没有专门的内置函数直接完成这个需求,但可以通过简单的集合操作快速实现——检查指定列是否包含1到9的全部整数,返回布尔值。

示例数据与代码框架

假设你的DataFrame和待完善的函数如下:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'col1': [1, 2, 3, 4, 5, 6, 7, 8, 9],
    'col2': [1, 3, 5, 7, 9, 2, 4, 6],  # 缺失数字8
    'col3': [10, 1, 2, 3, 4, 5, 6, 7, 8, 9]  # 包含1-9,额外有数字10
})

# 待完善的函数框架
def check_all_digits(df, column_name):
    # 此处补充验证逻辑
    pass

# 预期输出
print(check_all_digits(df, 'col1'))  # 应返回True
print(check_all_digits(df, 'col2'))  # 应返回False
print(check_all_digits(df, 'col3'))  # 应返回True

完善后的验证逻辑

直接利用集合的子集判断功能,高效完成检查:

def check_all_digits(df, column_name):
    # 获取列中所有不重复的值(先删除空值),转为集合
    unique_values = set(df[column_name].dropna().unique())
    # 定义需要覆盖的数字集合:1-9
    required_digits = set(range(1, 10))
    # 检查1-9是否全部存在于列的唯一值中
    return required_digits.issubset(unique_values)

处理非整数/异常值的增强版本

如果列中可能存在字符串类型的数字、空值或非数值,可以先做类型转换与过滤:

def check_all_digits(df, column_name):
    try:
        # 将列转为数值类型,无法转换的设为NaN后删除
        numeric_series = pd.to_numeric(df[column_name], errors='coerce').dropna()
        # 转为整数(确保只处理整数)
        integer_vals = numeric_series.astype(int)
        # 获取唯一值集合
        unique_values = set(integer_vals.unique())
        required_digits = set(range(1, 10))
        return required_digits.issubset(unique_values)
    except Exception:
        # 出现任何异常(比如列不存在)直接返回False
        return False

测试结果

运行完善后的代码,输出与预期完全一致:

True
False
True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:32:09