如何将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)
转换后你的数据会变成这样:
| Year | Sales | time_ordinal |
|---|---|---|
| 1-01 | 266.0 | 1 |
| 1-02 | 145.9 | 2 |
| ... | ... | ... |
| 2-01 | 194.3 | 13 |
这个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
相关产品推荐
相关产品推荐

