类型工具帮助判断、转换和识别 pandas 中的各类数据类型,以及处理缺失值的表示方式。


1. pd.api.types

pd.api.types 是 pandas 提供的类型判断模块,内含大量工具函数。

1.1 常用判断函数

函数作用
is_integer_dtype(obj)是否为整数类型(含可空整数)
is_float_dtype(obj)是否为浮点类型(含可空浮点)
is_bool_dtype(obj)是否为布尔类型(含可空布尔)
is_object_dtype(obj)是否为 object 类型
is_string_dtype(obj)是否为字符串类型(含 string 与 object 推断)
is_datetime64_any_dtype(obj)是否为任何类型的 datetime64(含时区)
is_timedelta64_dtype(obj)是否为 timedelta64 类型
is_categorical_dtype(obj)是否为 category 类型
is_sparse(obj)是否为 SparseDtype
is_numeric_dtype(obj)是否为数值类型(整数、浮点、复数)
is_extension_array_dtype(obj)是否为扩展数组类型(如 Int64、ArrowDtype)
is_interval_dtype(obj)是否为区间类型
is_period_dtype(obj)是否为周期类型
import pandas as pd
import numpy as np
 
s = pd.Series([1, 2, 3], dtype='Int64')
 
pd.api.types.is_integer_dtype(s)          # True
pd.api.types.is_extension_array_dtype(s)  # True
pd.api.types.is_numeric_dtype(s)          # True

1.2 其他重要工具

函数作用
infer_dtype(obj, skipna=True)推断标量或数组的实际数据类型(字符串描述)
pandas_dtype(dtype)将 dtype 字符串或对象解析为 pandas dtype
union_categoricals(cats)合并多个 Categorical 对象,保留所有类别
pd.api.types.infer_dtype([1, 2, 3])      # 'integer'
pd.api.types.pandas_dtype('Int64')       # Int64Dtype()
 
c1 = pd.Categorical(['a', 'b'])
c2 = pd.Categorical(['b', 'c'])
merged = pd.api.types.union_categoricals([c1, c2])
print(merged.categories)  # Index(['a', 'b', 'c'])

2. 转换函数

2.1 Pandas 内置转换方法

方法作用
astype(dtype)强制转换为指定类型
convert_dtypes()自动推断每列为最佳可空类型(如 Int64、string、boolean)
infer_objects()尝试将 object 类型推断为更具体的类型
df = pd.DataFrame({
    'a': [1, 2, None],       # 整型混合缺失
    'b': ['x', 'y', 'z'],    # 字符串
    'c': [True, False, None] # 布尔混合缺失
})
 
print(df.dtypes)
# a    float64
# b     object
# c     object
# dtype: object
 
df2 = df.convert_dtypes()
print(df2.dtypes)
# a     Int64
# b    string
# c    boolean
# dtype: object

2.2 顶级转换函数

函数作用
pd.to_numeric(arg)转为数值类型,可处理错误选项
pd.to_datetime(arg)转为 datetime64 序列或索引
pd.to_timedelta(arg)转为 timedelta64 序列或索引
# to_numeric
pd.to_numeric(['1', '2.5', None])  # 自动处理 None -> NaN
 
# to_datetime
pd.to_datetime(['2024-01-01', '2024-01-02'])
 
# to_timedelta
pd.to_timedelta(['1 day', '2 hours'])

参数示例

  • to_numeric(..., errors='coerce'):无效值转为 NaN
  • to_datetime(..., format='%Y-%m-%d'):指定解析格式
  • to_timedelta(..., unit='h'):指定数值单位

3. 缺失值标识

pandas 用多种方式表示缺失数据,需根据上下文选择。

3.1 缺失值类型

标识类型说明
pd.NApandas 通用缺失值用于可空类型(Int64、string、boolean)
pd.NaT时间戳缺失值用于 datetime64、timedelta64、period
np.nanNumPy 浮点缺失值浮动数类型的默认缺失值
NonePython 对象存入 object 类型时显示为 None

兼容性提醒

  • np.nan 属于 float,在整数列中会被强制转为浮点。
  • pd.NA 在 sum()、mean() 等聚合中遵循“跳过缺失”规则。
  • pd.NaT 与 np.nan 在比较时不相等。

3.2 缺失值判断函数

函数作用
pd.isna(obj)判断元素是否为 NaN、NaT、NA、None
pd.notna(obj)isna 的反操作
s = pd.Series([1, pd.NA, np.nan, None], dtype='Int64')
 
pd.isna(s)   # [False, True, True, True]
pd.notna(s)  # [True, False, False, False]

注意

  • 建议统一使用 pd.isna() / pd.notna() 处理所有缺失类型。
  • 判断单个值是否为缺失,可直接 pd.isna(value)。