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

KMeans聚类绘图时pd.to_datetime缺失年月日参数报错如何解决

错误原因
  • pd.to_datetime()传入多列时,默认要求输入的三列分别对应年、月、日用来拼接完整日期,你传入的AAPL前两列为「日期列+行情数值列」,不符合拼接要求,直接触发缺失年月日的报错
  • KMeans只能处理数值类型特征,datetime类型无法直接输入模型训练,需要转成数值型时间戳
  • pandas数据结构不支持x[:,0]类numpy的多维切片索引,需要先转成numpy数组再操作
修正方案

按以下逻辑调整代码即可正常训练聚类并绘图:

  1. 单独处理第一列日期:转成datetime后转换为数值型时间戳
  2. 直接取第二列的原始行情数值作为第二个特征
  3. 合并两个特征为numpy矩阵后输入KMeans训练
  4. 绘图时可根据需要把x轴的时间戳转成日期格式展示
可运行完整代码
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 读取数据集
AAPL = pd.read_csv('AAPL.csv', header=0)
# 日期列转数值型时间戳(单位为天,也可根据精度需求调整单位)
date_ts = pd.to_datetime(AAPL.iloc[:,0]).view('int64') // (10**9 * 86400)
# 取第二列作为数值特征(对应开盘/收盘等行情值)
price_val = AAPL.iloc[:,1].values
# 合并为训练用特征矩阵
x = pd.concat([pd.Series(date_ts), AAPL.iloc[:,1]], axis=1).values

# 聚类训练
kmeans4 = KMeans(n_clusters=4, random_state=42)
y_kmeans4 = kmeans4.fit_predict(x)

# 结果输出
print(y_kmeans4)
print(kmeans4.cluster_centers_)

# 绘图
plt.scatter(x[:,0], x[:,1], c=y_kmeans4, cmap='rainbow')
plt.scatter(kmeans4.cluster_centers_[:,0], kmeans4.cluster_centers_[:,1], color='black')
# 可选:x轴时间戳转日期刻度
plt.xticks(rotation=45)
ax = plt.gca()
ax.set_xticklabels([pd.to_datetime(t, unit='D').strftime('%Y-%m-%d') for t in ax.get_xticks()])
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:03