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

如何用sklearn的make_column_selector通用筛选所有datetime类型列?

通用筛选DataFrame中所有datetime类型列的方法

你可以通过两种简洁的方法,一次性筛选DataFrame中所有datetime相关类型的列(包括无时区的datetime64[ns]、基础np.datetime64,以及带UTC时区的datetime64[ns, UTC]):

方法1:结合scikit-learn的make_column_selector与自定义类型判断

利用np.issubdtype判断列类型是否属于datetime64的衍生类型,传递给make_column_selector的dtype_include参数:

from sklearn.compose import make_column_selector
import numpy as np

def is_datetime_dtype(dtype):
    # 匹配所有datetime64子类,含带时区的类型
    return np.issubdtype(dtype, np.dtype("datetime64"))

selector = make_column_selector(dtype_include=is_datetime_dtype)
selected_columns = selector(df)

这个方法的核心是np.issubdtype会识别所有datetime64的子类型,包括带UTC时区的特殊类型,解决了单独枚举具体类型时覆盖不全的问题。

方法2:纯Pandas原生方法

如果不需要依赖scikit-learn,直接用Pandas的select_dtypes方法,指定include='datetime64'即可自动匹配所有datetime相关列:

# 筛选所有datetime类型列并转为列表
datetime_cols = df.select_dtypes(include=['datetime64']).columns.tolist()

为什么之前单独指定时区类型无效?

scikit-learn的make_column_selector默认会精确匹配数据类型,而datetime64[ns, UTC]是datetime64的子类型,并非完全等同的类型,所以直接传入np.dtype('datetime64[ns, UTC]')无法匹配到目标列。而通过类型继承关系的判断(np.issubdtype)或Pandas的内置筛选逻辑,就能覆盖所有datetime衍生类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:43:25