如何归一化pandas数据框的日期列 解决无法将日期字符串转为float的错误
报错原因
你使用的代码尝试直接对字符串格式的日期做数值转换,'17-Aug-20 00:00:00'这类日期字符串本身不属于数值类型,因此无法直接做浮点型转换和归一化计算。
解决步骤
要完成日期列的归一化,需要先把日期转换为可计算的数值型时间戳,再做归一化处理,具体实现代码如下:
import pandas as pd from sklearn.preprocessing import MinMaxScaler # 1. 将字符串类型的时间列转换为pandas datetime格式 df['Time'] = pd.to_datetime(df['Time'], format='%d-%b-%y %H:%M:%S') # 2. 将datetime转换为Unix时间戳(数值型,单位为秒) df['timestamp'] = df['Time'].apply(lambda x: x.timestamp()) # 3. 对时间戳做归一化处理,此处示例用你需要的(-1,1)取值范围 scaler = MinMaxScaler(feature_range=(-1, 1)) df['scaled_time'] = scaler.fit_transform(df[['timestamp']]) # 输出结果查看 print(df[['Time', 'scaled_time']])
补充:归一化值反向转回原始日期
如果后续需要把归一化后的数值还原为原始日期,可参考以下代码:
# 示例:取第一条数据的归一化值反向转换 scaled_val = df.loc[0, 'scaled_time'] # 先转回时间戳 origin_ts = scaler.inverse_transform([[scaled_val]])[0][0] # 再转回日期格式 origin_time = pd.to_datetime(origin_ts, unit='s') print(origin_time)
内容的提问来源于stack exchange,提问作者Soheil Paper
相关产品推荐
相关产品推荐

