构建线性回归与决策树模型遇报错:无法将日期字符串转为浮点数
解决决策树回归中日期字符串转float的报错问题
报错原因很明确:你的X_train或X_test里包含像'3/1/2019'这样的日期字符串,而DecisionTreeRegressor只接受数值型特征,没法直接处理字符串,所以抛出了ValueError。
下面是两种靠谱的解决方法:
方法一:把日期转换成有意义的数值特征(推荐)
日期本身带时间顺序信息,最好转成能体现这个特性的数值,比如时间戳,或者拆分成年、月、日三个独立特征。用pandas处理的示例代码如下:
import pandas as pd # 先把日期字符串转成datetime类型(假设日期列名叫'date') X_train['date'] = pd.to_datetime(X_train['date']) X_test['date'] = pd.to_datetime(X_test['date']) # 方式1:转成以天为单位的时间戳(从1970-01-01到该日期的天数) X_train['date_days'] = (X_train['date'] - pd.Timestamp('1970-01-01')).dt.days X_test['date_days'] = (X_test['date'] - pd.Timestamp('1970-01-01')).dt.days # 删除原日期列 X_train.drop('date', axis=1, inplace=True) X_test.drop('date', axis=1, inplace=True) # 或者方式2:拆分成年、月、日三个单独特征 X_train['year'] = X_train['date'].dt.year X_train['month'] = X_train['date'].dt.month X_train['day'] = X_train['date'].dt.day X_test['year'] = X_test['date'].dt.year X_test['month'] = X_test['date'].dt.month X_test['day'] = X_test['date'].dt.day X_train.drop('date', axis=1, inplace=True) X_test.drop('date', axis=1, inplace=True)
处理完之后再运行你原来的决策树训练代码就行。
方法二:标签编码(仅适合特殊场景)
如果你的日期是离散且不需要保留时间顺序的场景,可以用LabelEncoder把字符串转成数值,但这种方法会丢失日期的时间逻辑,不推荐常规日期使用:
from sklearn.preprocessing import LabelEncoder # 用训练集的数据拟合编码器 le = LabelEncoder() X_train['date'] = le.fit_transform(X_train['date']) # 测试集直接用训练集的编码器转换,不要重新拟合 X_test['date'] = le.transform(X_test['date'])
内容的提问来源于stack exchange,提问作者Deepak Budhiraja
相关产品推荐
相关产品推荐

