Конвертировать Pandas Столбец с часовым диапазоном от 01:00 до 24:00 - PullRequest
0 голосов
/ 30 марта 2020

У меня есть почасовые данные за весь год, хранящиеся в столбце Pandas, который является объектом типа d. Данные были импортированы из файла .CSV со следующей структурой:

Date/Time,kWh
 01/01  01:00:00,1.14168620105289
 01/01  02:00:00,0.998495769210657
 01/01  03:00:00,0.949679309420898
 01/01  04:00:00,0.938080118507197
 01/29  20:00:00,1.14161727165962
 01/29  21:00:00,1.01263083086978
 01/29  22:00:00,0.961652730472469
 01/29  23:00:00,0.951211299856564
 01/29  24:00:00,0.949390070561629

Таким образом, столбец Дата / Время включает месяц, день, часы, минуты и секунды. Я пытаюсь (1) преобразовать этот столбец в DateTime и (2) установить год как 2019.

У меня проблема с преобразованием, потому что по какой-то странной причине, а не по обычному - диапазон часов от 00:00 до 23:59; группа, закодировавшая файл .CSV, выбирает часы в диапазоне от 01:00 до 24:00. Поэтому, когда я запускаю следующую команду:

cons['Date/Time'] =  pandas.to_datetime(cons['Date/Time'], format=' %m/%d  %H:%M:%S')

я получаю следующую ошибку:

ValueError: time data ' 01/01  24:00:00' does not match format ' %m/%d  %H:%M:%S' (match)

Я ищу помощь в преобразовании столбца в DateTime и установке года данных как 2019 . Любая помощь будет оценена.

1 Ответ

0 голосов
/ 30 марта 2020

Краткий ответ: Я провел некоторые манипуляции со строками, чтобы уменьшить все часы на один час

df['temp_col'] = df['Date/Time,kWh'].str.split(':').str[0]
df['temp_col'] = (pd.to_numeric(df['temp_col']) - 1).astype(str)
df['temp_col'] = df['temp_col'].apply(lambda x: f'0{x}' if len(x)==1 else x)
df['temp_col'] = df['temp_col'] + df['Date/Time,kWh'].str[2:]

Вывод ниже не является чистым , потому что данные, которые вы разместили, не ' хорошо скопируйте с помощью pd.read_clipboard (), но это должно дать вам представление.

        Date/Time,kWh               temp_col
01/01   01:00:00,1.14168620105289   00:00:00,1.14168620105289
01/01   02:00:00,0.998495769210657  01:00:00,0.998495769210657
01/01   03:00:00,0.949679309420898  02:00:00,0.949679309420898

Более подробно: Я взял первую часть строки, где часы и создал столбец, преобразуя их в целое число и вычитая 1. Затем я добавил к нему оставшуюся часть строки. На ваш вопрос, это был бы один из способов получить часы до 0-23, а не 1-24. Звучит так, будто все прошло на «час позже, чем должно быть?» В противном случае, если вы хотите просто сделать 24:00 = 00:00 (не уверены, какой метод подходит для ваших данных) @dzakyputra прокомментировал сообщение. Вы также можете выполнить аналогичные манипуляции со строками, чтобы получить 24:00 до 00: 000, поэтому, надеюсь, это поможет вам решить.

Если вы хотите сделать его «однострочным», вы можете, но лучше разбить на шаги.

df['Date/Time,kWh'] = (pd.to_numeric(df['Date/Time,kWh'].str.split(':').str[0])-1).astype(str).apply(lambda x: f'0{x}' if len(x)==1 else x) + df['Date/Time,kWh'].str[2:]

Вывод:

        Date/Time,kWh
01/01   00:00:00,1.14168620105289
01/01   01:00:00,0.998495769210657
01/01   02:00:00,0.949679309420898
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...