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

机器学习建模时如何将月份缩写预处理为可输入模型的整数格式

月份字符串转模型可用整数的实现方案

针对逗号分隔的多月份字符串列、含空值的场景,优先采用多热整数编码方案,输出全为0/1整数类型,无字符串、无缺失值,不会给模型引入错误的数值关系,可直接输入建模。

  • 预定义固定的月份缩写与数字映射关系,避免运行时顺序错乱导致编码不一致
  • 先将空值替换为空字符串,按逗号拆分每行得到月份列表,避免空值拆分报错
  • 遍历所有月份,逐行判断当前月份是否在该行的月份列表中,出现则标记为1,未出现标记为0,统一转为int类型
  • 若空值有特殊业务含义(代表未知月份),可额外新增1列0/1整数列单独标记空值,不要直接留空。

代码实现(pandas环境)

import pandas as pd
import numpy as np

# 加载原始数据
df = pd.DataFrame({
    'col': [np.nan, 'Jan,Apr,Jul,Oct', 'Jan,Jun,Jul', 'Apr,May,Oct,Nov', np.nan]
})

# 固定月份映射:1-12对应公历1-12月,映射关系全局固定
month_map = {
    'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6,
    'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12
}

# 空值替换为空串后,按逗号拆分得到每行的月份列表
df['month_list'] = df['col'].fillna('').str.split(',')

# 逐个生成月份对应的0/1整数列
for month_abbr, month_num in month_map.items():
    df[f'month_{month_num}'] = df['month_list'].apply(lambda x: 1 if month_abbr in x else 0).astype(int)

# 删除中间处理列,得到最终建模数据集
df = df.drop(columns=['month_list'])

处理后效果示例

处理后所有新增列均为整数类型,无缺失值,可直接输入模型:

索引colmonth_1month_4month_5month_6month_7month_10month_11其余未出现月份列
0NaN00000000
1Jan,Apr,Jul,Oct11001100
2Jan,Jun,Jul10011000
3Apr,May,Oct,Nov01100110
4NaN00000000

注意避坑

不要直接把月份数字拼接为单个整数(比如把Jan、Apr、Jul、Oct直接拼接为14710),这类数值没有实际业务含义,会给模型引入错误的数值大小、距离关系,严重影响建模效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:54:23