如何验证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
相关产品推荐
相关产品推荐

