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

如何将Pandas中非标准日期(如1-01)转换为适配Scikit-learn的格式

处理Pandas中“年-月”格式的日期,适配机器学习需求

我来帮你搞定这个日期格式转换的问题,针对你这种年-月格式的字符串,有两种常用的处理方式,都能完美适配Scikit-learn这类机器学习库的需求:

方法一:转换为整数序数(推荐用于大多数时序建模场景)

这种方式把时间转换成连续的整数,直接体现时间的先后顺序,模型能轻松理解时序关系——比如第1年1月是1,第1年2月是2,第2年1月就是13,以此类推。

具体代码实现:

import pandas as pd

# 假设你的数据框是df
# 拆分年和月,转换成整数类型
df[['year', 'month']] = df['Year'].str.split('-', expand=True).astype(int)
# 计算连续的时间序数
df['time_ordinal'] = (df['year'] - 1) * 12 + df['month']
# 可选:删除中间生成的year和month列
df = df.drop(['year', 'month'], axis=1)

转换后你的数据会变成这样:

YearSalestime_ordinal
1-01266.01
1-02145.92
.........
2-01194.313

这个time_ordinal列可以直接作为模型的输入特征,非常方便。

方法二:转换为标准日期格式(适合需要提取更多时间特征的场景)

如果你需要后续提取月份、季度、年份等单独的时间特征,或者需要时间戳作为输入,可以把字符串转换成Pandas的datetime类型。

具体代码实现:

import pandas as pd

# 把"年-月"补全为"年-月-01",再转换成datetime
# 注意:如果你的年份是四位(比如2021-01),把format改成'%Y-%m-%d'
df['date'] = pd.to_datetime(df['Year'] + '-01', format='%y-%m-%d')

# 可选1:转换成秒级时间戳整数(直接喂给模型)
df['timestamp'] = df['date'].astype('int64') // 10**9

# 可选2:提取单独的时间特征
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['quarter'] = df['date'].dt.quarter

转换后你可以根据模型需求,选择用完整的datetime列、时间戳整数,或者拆分后的年/月/季度特征作为输入。

小提示

如果你的年份不是默认的20xx,而是比如1991、1992这类,你可以手动拼接年份前缀:

# 比如年份是1991、1992、1993
df['date'] = pd.to_datetime('199' + df['Year'], format='%Y-%m-%d')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:52:42