Как объединить / объединить два столбца в Pandas, когда один столбец является datetime, а другой - object? - PullRequest
0 голосов
/ 18 мая 2018

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

        Date   Time
0 2017-01-01  00:00
1 2017-01-01  01:00
2 2017-01-01  02:00
3 2017-01-01  03:00
4 2017-01-01  04:00

Я хочу объединить столбец Time (тип: объект) в столбец Date (тип: datetime) (и изменить его имя позже на Datetime).Значения в столбце Datetime должны выглядеть следующим образом:

2017-01-01 00:00

Каков наилучший способ объединения / объединения этих столбцов?Полученный тип столбца должен быть datetime.Спасибо.

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Использование pd.to_datetime с dt.strftime

df['datetime']=pd.to_datetime(df.Date+df.Time,format='%Y-%m-%d%H:%M').dt.strftime('%Y-%m-%d %H:%M')

df
Out[879]: 
         Date   Time          datetime
0  2017-01-01  00:00  2017-01-01 00:00
1  2017-01-01  01:00  2017-01-01 01:00
2  2017-01-01  02:00  2017-01-01 02:00
3  2017-01-01  03:00  2017-01-01 03:00
4  2017-01-01  04:00  2017-01-01 04:00
0 голосов
/ 18 мая 2018

Это может быть немного грубым, но вы можете объединить их в виде строки и затем использовать pd.to_datetime(), чтобы снова сделать их датами:

In [1]: date = pd.to_datetime(pd.Series(['2017-01-01']*5))

In [2]: time = ["0{}:00".format(i) for i in range(5)]

In [3]: df = pd.DataFrame({'date': date, 'time': time})

In [4]: df
Out[4]:
        date   time
0 2017-01-01  00:00
1 2017-01-01  01:00
2 2017-01-01  02:00
3 2017-01-01  03:00
4 2017-01-01  04:00

In [5]: pd.to_datetime((df.date.astype(str) + " " + df.time))
Out[5]:
0   2017-01-01 00:00:00
1   2017-01-01 01:00:00
2   2017-01-01 02:00:00
3   2017-01-01 03:00:00
4   2017-01-01 04:00:00
dtype: datetime64[ns]
0 голосов
/ 18 мая 2018

Вы можете изменить Date на строку, объединить ее со временем, а затем преобразовать в datetime:

df['Date'] = df['Date'].astype(str)

df['datetime'] = pd.to_datetime(df.Date+' '+df.Time)

>>> df
         Date   Time            datetime
0  2017-01-01  00:00 2017-01-01 00:00:00
1  2017-01-01  01:00 2017-01-01 01:00:00
2  2017-01-01  02:00 2017-01-01 02:00:00
3  2017-01-01  03:00 2017-01-01 03:00:00
4  2017-01-01  04:00 2017-01-01 04:00:00

Затем вы можете удалить столбцы Date и Time, если ненужно больше

df.drop(['Date', 'Time'], axis=1, inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...