Python добавляет почасовые данные [1-24] в данные datetime

У меня есть следующая структура данных в фрейме данных:

Date          Hour
01/01/2016    1
01/01/2016    2
01/01/2016    3
01/01/2016    4
   ...        ...
01/01/2016    13
01/01/2016    14
   ...        ...

Данные представляют собой почасовые данные за 2 года. Мне удалось получить даты в формате datetime, но часы были проанализированы отдельно и находятся в отдельном столбце. Как преобразовать часы в объект datetime и добавить их к датам, чтобы получить правильную структуру datetime:

Date          Hour     DateTime
01/01/2016    1        01/01/2016 01:00:00
01/01/2016    2        01/01/2016 02:00:00
01/01/2016    3        01/01/2016 03:00:00
01/01/2016    4        01/01/2016 04:00:00
   ...        ...             ...
01/01/2016    13       01/01/2016 13:00:00
01/01/2016    14       01/01/2016 14:00:00
   ...        ...             ...

Действительно ли даты в формате datetime? Или это струны?

timgeb 13.12.2018 11:05

Изначально они были в виде на 01.01.2016. Я использовал эту строку, чтобы преобразовать их в datetime: df5 ['datum'] = pd.to_datetime (df5 ['datum'], dayfirst = True) .dt.date

Andraxyz 13.12.2018 11:08

В зависимости от того, охватывают ли данные весь период n-го часа дня или определенный момент времени, вы должны подумать, как это представить в вашем DateTime. Как европеец, я бы предложил сопоставить Hour 1 с 00:00:00, поскольку 2016-01-01T24:00:00 описывает тот же момент времени, что и 2016-01-02T00:00:00 (не считая дополнительных секунд и т. д.)

Raketenolli 13.12.2018 11:11

Час 1 представляет собой весь период n-го часа, поскольку данные предназначены для почасового производства электроэнергии в кВтч.

Andraxyz 13.12.2018 11:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
971
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

обратитесь к этому и сделайте свой собственный код Вы можете использовать dt.strftime, если вам нужно преобразовать datetime в другие форматы (но обратите внимание, что тогда dtype столбца будет object (string)):

import pandas as pd

df = pd.DataFrame({'DOB': {0: '26/1/2016 ', 1: '26/1/2016 '}})
print (df)

s Дата рождения 0 26.01.2016 1 26.01.2016

df['DOB'] = pd.to_datetime(df.DOB)
print (df)

s Дата рождения 0 2016-01-26 1 2016-01-26

df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print (df)

s Дата рождения 1 год 0 26.01.2016 26.01.2016 1 2016-01-26 26.01.2016

Предположим, что ваши 2 столбца «Дата» и «Час» являются строками. Но если нет, то об этом следует позаботиться. Берет 2 строковых столбца, объединяет их, затем преобразует в datetime в определенном формате:

if not is_string_dtype(df['Date']):
    df['Date'] = df['Date'].dt.strftime('%m/%d/%Y')
if not is_string_dtype(df['Hour']):
    df['Hour'] = df['Hour'].astype(str)

df['DateTime'] = df['Date'] + ' ' + df['Hour']
df['DateTime'] = pd.to_datetime(pd.Series(df['DateTime']), format = "%m/%d/%Y %H")
Ответ принят как подходящий

Данный

>>> df                                                                                                                 
         Date  Hour
0  01/01/2016     1
1  01/01/2016     2
2  01/01/2016     3
3  01/01/2016     4

Я бы выдал

>>> df['Date'] = pd.to_datetime(df['Date']) # pick dayfirst=True or False in your code                                                                            
>>> df                                                                                                                 
        Date  Hour
0 2016-01-01     1
1 2016-01-01     2
2 2016-01-01     3
3 2016-01-01     4

а затем построить столбец 'DateTime' путем векторизованного добавления timedeltas:

>>> df['DateTime'] = df['Date'] + pd.to_timedelta(df['Hour'], 'h')                                                     
>>> df                                                                                                                 
        Date  Hour            DateTime
0 2016-01-01     1 2016-01-01 01:00:00
1 2016-01-01     2 2016-01-01 02:00:00
2 2016-01-01     3 2016-01-01 03:00:00
3 2016-01-01     4 2016-01-01 04:00:00

Это то, что я искал, спасибо.

Andraxyz 13.12.2018 11:44

Другие вопросы по теме