Следующий код выполнит эту работу.
data = pd.read_csv('data.csv', sep=',')
data['date'] = pd.to_datetime(data['date'] + " " + data['time'], format='%m/%d/%Y %H:%M:%S')
lastday = data.loc[0, 'date']
def convert_time(x):
global lastday
if x.date() == lastday.date():
tm = x - lastday
return tm.total_seconds()/60
else:
lastday = x
return 0
data['time'] = data['date'].apply(convert_time)
data.set_index('date', inplace=True)
data = data.resample('60T').first()
У вас есть 'date'
и 'time'
в разных столбцах.
То, что я сделал здесь, - это объединение строк и преобразование результата вобъекты даты и времени (сохраняются в столбце 'date'
).Затем вы можете выполнить повторную выборку.
Столбец 'time'
изменен и теперь показывает время в минутах с начала дня.Первая строка дня (в любое время, я заметил, что это не всегда 6:00:00) устанавливается на 0.
После этого, используя предоставленный вами CSV, data
будет:
time temperature humidity wind
date
2018-10-03 06:00:00 0.0 63.0 0.0 0.0
2018-10-03 07:00:00 60.0 63.0 0.0 2.0
2018-10-03 08:00:00 120.0 104.0 11.0 0.0
2018-10-03 09:00:00 180.0 93.0 0.0 50.0
2018-10-03 10:00:00 240.0 177.0 0.0 2.0
2018-10-03 11:00:00 300.0 133.0 0.0 0.0
2018-10-03 12:00:00 360.0 70.0 0.0 0.0
2018-10-03 13:00:00 465.0 83.0 0.0 60.0
2018-10-03 14:00:00 NaN NaN NaN NaN
2018-10-03 15:00:00 540.0 127.0 0.0 50.0
2018-10-03 16:00:00 600.0 205.0 0.0 0.0
2018-10-03 17:00:00 660.0 298.0 0.0 0.0
Всего 87 строк (здесь я показал только первые 12), охватывающих все дни вашего CSV-файла.У вас есть Nan
значения для строк, в которых нет данных.
РЕДАКТИРОВАТЬ после комментариев
Примечание:
data = data.resample('60T').first()
Если в строке больше строкинтервал времени с передискретизацией, метод .first()
использует данные первой строки интервала, отбрасывая другие.
.last()
использует данные последней строки интервала.Есть и другие методы, которые вы можете использовать .mean()
вычисляет среднее значение, .sum()
вычисляет сумму.Используйте тот, который лучше подходит для вашего случая.