KMeans聚类日期数据报错:日期转时间戳失败求助
解决方案
问题根源是你的Alert_Time列存在多种日期字符串格式(如'2020-12-22 00:00:00'和'2020-12-22'),直接将字符串转为整数会失败;同时KMeans仅支持数值型输入,无法直接处理字符串日期。按以下步骤解决:
1. 统一转换为datetime类型
用pandas的to_datetime方法自动识别多种日期格式,把字符串转为标准datetime对象:
import pandas as pd import numpy as np from sklearn.cluster import KMeans # 转换日期列,无法识别的无效值转为NaT df["Alert_Time"] = pd.to_datetime(df["Alert_Time"], errors="coerce")
- 后续可通过
df.dropna(subset=["Alert_Time"])删除含缺失值的行,或用df["Alert_Time"].fillna(...)填充缺失值。
2. 转换为秒级时间戳
从datetime对象提取秒级时间戳,得到KMeans可接受的数值类型:
# 两种等价写法任选其一 df["stamp"] = df["Alert_Time"].view("int64") // 10**9 # 或 df["stamp"] = df["Alert_Time"].astype(np.int64) // 10**9
3. 执行KMeans聚类
确保用于聚类的特征列全为数值型(比如保留stamp和其他业务数值列):
# 替换为你的实际数值特征列名 feature_cols = ["stamp", "数值列1", "数值列2"] k_means = KMeans(n_clusters=3) k_means.fit(df[feature_cols])
特殊格式处理
如果to_datetime无法自动识别日期格式,可手动指定格式:
# 单一格式指定 df["Alert_Time"] = pd.to_datetime(df["Alert_Time"], format="%Y-%m-%d %H:%M:%S", errors="coerce") # 多格式混合(pandas 1.3.0+支持) df["Alert_Time"] = pd.to_datetime(df["Alert_Time"], format=["%Y-%m-%d %H:%M:%S", "%Y-%m-%d"], errors="coerce")
内容的提问来源于stack exchange,提问作者igneous spark
相关产品推荐
相关产品推荐

