ValueError: не удалось преобразовать строку в число с плавающей точкой: '0:35:00' - PullRequest
0 голосов
/ 15 октября 2019

Приведенный ниже код не работает. Я пытаюсь преобразовать (данные временного ряда) в столбец (время) моего 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

Я получаю эту ошибку: Нажмите здесь, чтобы показать подробности об ошибке ValueError: не удалось преобразовать строку в число с плавающей точкой: '0: 35: 00'

Я хочу получить некоторую помощь, спасибо завсе

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Если вы хотите преобразовать внутридневное время в цифру, поскольку в дне 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])
0 голосов
/ 15 октября 2019

Что произойдет, когда вы получите pandas dtype типа column? Это типа datetime? Попробуйте series['Time'], чтобы узнать.

Если он возвращает тип объекта, вам нужно использовать параметр parse_dates= в функции read_csv.

Также вы можете попытаться проанализировать столбец вручную с помощью:

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

, который преобразует строку в объект datetime для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...