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

如何提取Pandas DataFrame中名称为日期格式的列?

提取Pandas DataFrame中名称为日期格式的列

问题场景

给定如下DataFrame,需要提取名称为日期格式的列:

import pandas as pd
df = pd.DataFrame([["USD", 12.3, 1, 23.33, 33.1],["USD", 32.1, 2, 34.44, 23.1]],columns= ['currency', '1999-07-31', 'amount', '1999-10-31', '2000-01-31'])

对应的表格:

currency1999-07-31amount1999-10-312000-01-31
USD12.3123.3333.1
USD32.1234.4423.1

原代码尝试通过select_dtypes筛选日期类型列,但得到空结果:

datetime_types = ["datetime", "datetime64", "datetime64[ns]", "datetimetz"]
dates = df.columns.to_frame().select_dtypes(include=datetime_types)
# 输出:Empty DataFrame\nColumns: []\nIndex: [currency, 1999-07-31, amount, 1999-10-31, 2000-01-31]

期望输出:['1999-07-31', '1999-10-31', '2000-01-31']

问题原因

原代码逻辑错误:df.columns的数据类型是object(所有列名都是字符串),select_dtypes是用来筛选列中数据的类型,而非列名的内容或格式,因此无法匹配到名称为日期格式的列。

解决方案

方法1:利用Pandas日期解析功能

通过pd.to_datetime尝试解析每个列名,过滤掉无法解析为日期的列:

import pandas as pd
df = pd.DataFrame([["USD", 12.3, 1, 23.33, 33.1],["USD", 32.1, 2, 34.44, 23.1]],columns= ['currency', '1999-07-31', 'amount', '1999-10-31', '2000-01-31'])

date_cols = [col for col in df.columns if pd.to_datetime(col, errors='coerce') is not pd.NaT]
print(date_cols)
# 输出:['1999-07-31', '1999-10-31', '2000-01-31']
  • 优点:自动兼容多种合法日期格式(如YYYY/MM/DD)
  • 缺点:可能误判部分类似日期的字符串(如无效日期会被过滤,但部分合法非日期字符串可能被误解析)

方法2:正则表达式精准匹配

如果日期格式固定为YYYY-MM-DD,可以用正则表达式严格匹配:

import pandas as pd
import re

df = pd.DataFrame([["USD", 12.3, 1, 23.33, 33.1],["USD", 32.1, 2, 34.44, 23.1]],columns= ['currency', '1999-07-31', 'amount', '1999-10-31', '2000-01-31'])

date_pattern = re.compile(r'^\d{4}-\d{2}-\d{2}$')
date_cols = [col for col in df.columns if date_pattern.match(col)]
print(date_cols)
# 输出:['1999-07-31', '1999-10-31', '2000-01-31']
  • 优点:精准匹配指定格式,避免误判
  • 缺点:仅支持预设的日期格式,无法兼容其他格式

内容的提问来源于stack exchange,提问作者Gооd_Mаn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:40:11