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

如何断言整个DataFrame仅包含数值类型?含最简实现方法

如何断言Pandas DataFrame仅包含数值数据类型?

要快速验证你的DataFrame里所有列都是数值类型,其实有几种简洁的实现方式,我给你整理了最实用的两种:

方法一:利用select_dtypes快速判断(最简写法)

这是最直观的思路——筛选出所有非数值类型的列,如果筛选结果为空,就说明整个DataFrame全是数值类型:

import pandas as pd

# 替换成你的DataFrame变量名
assert df.select_dtypes(exclude=['number']).empty, "DataFrame中存在非数值类型的列"

这里的'number'是Pandas内置的类型类别,涵盖了所有整数(int)、浮点数(float)、布尔值(bool)以及对应的numpy数值类型(比如np.int64、np.float32)。如果你的场景里不把布尔值当作数值,可以把exclude参数改成['int', 'float']。

方法二:用numpy类型检查更严谨

如果你需要更精细地控制数值类型的范围,可以用np.issubdtype逐个校验每一列的数据类型:

import pandas as pd
import numpy as np

assert all(np.issubdtype(dtype, np.number) for dtype in df.dtypes), "存在非数值类型的列"

np.issubdtype(dtype, np.number)会验证该数据类型是否属于numpy数值类型的子类,同样覆盖所有常见的数值类型。如果只想检查整数和浮点数、不想包含布尔值,可以把条件改成:

assert all(np.issubdtype(dtype, np.integer) or np.issubdtype(dtype, np.floating) for dtype in df.dtypes), "存在非数值类型的列"

测试示例

假设你有一个混合类型的DataFrame:

df = pd.DataFrame({
    'num_col1': [1, 2, 3],
    'num_col2': [4.5, 5.6, 6.7],
    'non_num_col': ['apple', 'banana', 'cherry']
})

运行上面的断言语句时,会直接抛出AssertionError并提示你设置的错误信息,帮你快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:41:58