объединить столбцы с различными типами данных, чтобы создать один столбец dateTime в pandas фреймах данных - PullRequest
1 голос
/ 10 марта 2020

Я импортировал данные из некоторого источника, у которого есть дата в классе типов данных «объект» и час в целочисленном виде, и выглядит примерно так:

Date           Hour    Val
2019-01-01  1   0
2019-01-01  2   0
2019-01-01  3   0
2019-01-01  4   0
2019-01-01  5   0
2019-01-01  6   0
2019-01-01  7   0
2019-01-01  8   0

Мне нужен один столбец с датой-временем в столбец, который выглядит следующим образом:

DATETIME
2019-01-01 01:00:00
2019-01-01 02:00:00
2019-01-01 03:00:00
2019-01-01 04:00:00
2019-01-01 05:00:00
2019-01-01 06:00:00
2019-01-01 07:00:00
2019-01-01 08:00:00

Я попытался преобразовать столбец даты в формат dateTime, используя

pd.datetime(df.Date)

, а затем, используя

df.Date.dt.hour = df.Hour

, я получаю ошибка

ValueError: изменения свойства объекта типа datetime не поддерживаются. Изменить значения на оригинал.

Есть ли простой способ сделать это?

1 Ответ

1 голос
/ 10 марта 2020

Используйте pandas.to_timedelta и pandas.to_datetime:

# if needed
df['Date'] = pd.to_datetime(df['Date'])

df['Datetime'] = df['Date'] + pd.to_timedelta(df['Hour'], unit='H')

[out]

        Date  Hour  Val            Datetime
0 2019-01-01     1    0 2019-01-01 01:00:00
1 2019-01-01     2    0 2019-01-01 02:00:00
2 2019-01-01     3    0 2019-01-01 03:00:00
3 2019-01-01     4    0 2019-01-01 04:00:00
4 2019-01-01     5    0 2019-01-01 05:00:00
5 2019-01-01     6    0 2019-01-01 06:00:00
6 2019-01-01     7    0 2019-01-01 07:00:00
7 2019-01-01     8    0 2019-01-01 08:00:00

Так как вы попросив метод, объединяющий столбцы и использующий один вызов pd.to_datetime, вы можете сделать:

df['Datetime'] = pd.to_datetime((df['Date'].astype(str) + ' ' +
                                 df['Hour'].astype(str)),
                                 format='%Y-%m-%d %I')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...