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

使用K-Means对COVID CSV聚类时遇ValueError错误求助

解决K-Means聚类中日期字符串无法转为浮点型的错误

错误原因

K-Means是纯数值计算的聚类算法,不能直接处理字符串类型的数据。你代码里的Date列是'1/1/2020'这种字符串格式,哪怕改成dd/mm/yyyy格式,本质还是字符串,算法无法将其转为浮点型参与计算,所以触发了这个错误。

解决方案

把日期字符串转为数值型特征,比如日期对应的时间戳、从起始日期开始的天数,或者提取年份/月份的数值,再用这些数值和COVID-19 Death一起作为聚类特征。

修改后的完整代码

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('Monthly_COVID.csv')

# 1. 将日期字符串转为pandas datetime类型
# 如果CSV日期格式是月/日/年,指定format确保解析正确
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')

# 2. 生成数值型日期特征:比如从第一个日期开始的天数
df['Days_Since_Start'] = (df['Date'] - df['Date'].min()).dt.days

# 3. 选择数值型特征进行聚类
features = df[['Days_Since_Start', 'COVID-19 Death']]

# 4. 执行K-Means聚类
kmeans = KMeans(n_clusters=3, random_state=42)  
df['Cluster'] = kmeans.fit_predict(features)

print(df.head())

# 5. 可视化:用原始日期作为横轴,保持可读性
plt.figure(figsize=(10, 6))
plt.scatter(df['Date'], df['COVID-19 Death'], c=df['Cluster'], cmap='viridis')
plt.xlabel('Date')
plt.ylabel('COVID-19 Death')
plt.title('K-means Clustering of Monthly COVID Data')
# 旋转日期标签避免重叠
plt.xticks(rotation=45)
plt.show()

关键说明

  • pd.to_datetime:把字符串日期转为datetime对象,后续可以方便提取数值特征。如果你的CSV日期格式不是%m/%d/%Y(比如是日/月/年),需要修改format参数为%d/%m/%Y。
  • Days_Since_Start:将日期转化为从数据集中最早日期开始的天数,是连续的数值,适合聚类计算。你也可以用时间戳(df['Date'].astype('int64') // 10**9,转为秒级时间戳)替代,效果类似。
  • 聚类时只传入数值型特征:确保features里的列都是数值类型,避免字符串干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:04:55