【问题标题】:ValueError: could not convert string to float: '0:35:00'ValueError:无法将字符串转换为浮点数:'0:35:00'
【发布时间】:2020-02-11 20:29:34
【问题描述】:

下面的代码不起作用我正在尝试在我的 CSV 文件的(时间)列中转换(时间序列数据),其中只包含我需要转换或规范化的一列:

# Normalize time series data
from pandas import read_csv
from sklearn.preprocessing import MinMaxScaler
# load the dataset and print the first 5 rows
series = read_csv("E:\Dataset\Copy3.csv", header=0)
print(series.head())
# prepare data for normalization
values = series.values
values = values.reshape((len(values), 1))
# train the normalization
scaler = MinMaxScaler(feature_range=(0, 1))
scaler = scaler.fit(values)
print('Min: %f, Max: %f' % (scaler.data_min_, scaler.data_max_))
# normalize the dataset and print the first 5 rows
normalized = scaler.transform(values)
for i in range(5):
 print(normalized[i])
# inverse transform and print the first 5 rows
inversed = scaler.inverse_transform(normalized)
for i in range(5):
 print(inversed[i])

Output:
         Time
     0  0:35:00
     1  0:55:00
     2  0:59:00
     3  2:11:00
     4  2:45:00

我收到此错误: Press here to show Error details ValueError:无法将字符串转换为浮点数:'0:35:00'

我希望得到一些帮助,谢谢大家

【问题讨论】:

  • 哪一行有问题?始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图)(不是评论)。还有其他有用的信息。
  • string "0:35:00" 不是浮点值,所以你想做什么?也许您应该将其转换为 datetime 对象,然后获得总秒数。
  • 感谢您的重播,我现在将对其进行编辑。
  • 您正在分配 scaler = scaler.fit(values) ,而您正在使用它进行逆变换,这就是您收到错误的原因..
  • 我想在 (0-1) 范围内实时缩放,例如 (0:35:00) 到 0.551242

标签: python numpy time-series normalization scaling


【解决方案1】:

如果您想将一天内的时间转换为数字,因为一天有 86400 秒,您可以将时间缩放到 (0,86399) 的范围内。

from datetime import datetime
def intraday_time_scaler(t):
    tmp_time = datetime.strptime(t,'%H:%M:%S')
    return tmp_time.hour*3600 + tmp_time.minute*60 + tmp_time.second

df['time_scaled'] = df.apply(lambda row: intraday_time_scaler(row['Time']),axis=1)

或者,如果您的时间范围“00:00:00”超过“23:59:59”,例如: '35:43:33',执行如下操作:

time_list = '35:43:33'.split(':')
time_numeric = int(time_list[0])*3600 + int(time_list[1])*60 + int(time_list[2])

【讨论】:

  • 谢谢分配,这意味着我应该先按秒计算总时间,然后按秒计算总时间
  • 如果您想将时间用作机器学习的一个因素,那么计数秒数是一种线性方式来扩展您的时间输入。从那里您可以尝试根据您的目的应用各种加权/内核函数的方法。
【解决方案2】:

当您获得类型列的 pandas dtype 时会发生什么?它是日期时间类型的吗? 试试series['Time'] 找出答案。

如果它返回类型对象,那么您需要在read_csv 函数中使用parse_dates= 参数。

您也可以尝试手动解析列:

from datetime import datetime as dt
dt.strftime(series['time'], '%H:%M:%S')

这会将字符串转换为日期时间对象供您使用。

【讨论】:

  • 我收到此错误:TypeError:描述符“strftime”需要一个“datetime.date”对象但收到一个“系列”
猜你喜欢
  • 1970-01-01
  • 2022-08-04
  • 2019-03-23
  • 2018-06-13
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多