преобразовать столбец даты в кадре данных в тип даты - PullRequest
0 голосов
/ 01 февраля 2020

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

      import pandas as pd
      from datetime import datetime

      df = pd.DataFrame({'Id_sensor': [1, 2, 3, 4], 
                         'Date_start': ['2018-01-04 00:00:00.0', '2018-01-04 00:00:10.0',
                                        '2018-01-04 00:14:00.0', '2018-01-04'],
                         'Date_end': ['2018-01-05', '2018-01-06', '2017-01-06', '2018-01-05']})

Столбцы (Date_start и Date_end) имеют тип Object. Я хотел бы преобразовать в тип данных дат. И чтобы столбцы выглядели одинаково. То есть, другими словами, заполните поля даты, часа и минуты нулями, которых нет в столбце (Date_end).

Я попытался сделать следующий код:

      df['Date_start'] = pd.to_datetime(df['Date_start'], format='%Y/%m/%d %H:%M:%S')
      df['Date_end'] = pd.to_datetime(df['Date_end'], format='%Y/%m/%d %H:%M:%S')

Мой вывод:

        Id_sensor     Date_start         Date_end
           1       2018-01-04 00:00:00  2018-01-05
           2       2018-01-04 00:00:10  2018-01-06
           3       2018-01-04 00:14:00  2017-01-06
           4       2018-01-04 00:00:00  2018-01-05

Но я бы хотел, чтобы вывод был таким:

           Id_sensor      Date_start         Date_end
           1       2018-01-04 00:00:00    2018-01-05 00:00:00
           2       2018-01-04 00:00:10    2018-01-06 00:00:00
           3       2018-01-04 00:14:00    2017-01-06 00:00:00
           4       2018-01-04 00:00:00    2018-01-05 00:00:00

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Вы можете сначала преобразовать столбцы в datetime тип данных, используя to_datetime, а затем использовать dt.strftime, чтобы преобразовать столбцы в строковый тип данных в нужном формате:

import pandas as pd
from datetime import datetime

df = pd.DataFrame({
    'Id_sensor': [1, 2, 3, 4], 
    'Date_start': ['2018-01-04 00:00:00.0', '2018-01-04 00:00:10.0',
                   '2018-01-04 00:14:00.0', '2018-01-04'],
    'Date_end': ['2018-01-05', '2018-01-06', '2017-01-06', '2018-01-05']})

df['Date_start'] = pd.to_datetime(df['Date_start']).dt.strftime('%Y-%m-%d %H:%M:%S')
df['Date_end'] = pd.to_datetime(df['Date_end']).dt.strftime('%Y-%m-%d %H:%M:%S')

print(df)
# Output:
#
#    Id_sensor           Date_start             Date_end
# 0          1  2018-01-04 00:00:00  2018-01-05 00:00:00
# 1          2  2018-01-04 00:00:10  2018-01-06 00:00:00
# 2          3  2018-01-04 00:14:00  2017-01-06 00:00:00
# 3          4  2018-01-04 00:00:00  2018-01-05 00:00:00
1 голос
/ 01 февраля 2020

На самом деле происходит то, что серии df['Date_start'] и df['Date_end'] имеют тип datetime64 [нс] , но при отображении кадра данных, если все значения времени столбцов равны нулю, это не показывает их. Если вам нужен форматированный вывод, вы можете попытаться снова преобразовать их в типы объектов и задать для них формат с dt.strftime :

df['Date_start'] = pd.to_datetime(df['Date_start']).dt.strftime('%Y/%m/%d %H:%M:%S')
df['Date_end'] = pd.to_datetime(df['Date_end']).dt.strftime('%Y/%m/%d %H:%M:%S')
print (df)

Выходы:

   Id_sensor           Date_start             Date_end
0          1  2018/01/04 00:00:00  2018/01/05 00:00:00
1          2  2018/01/04 00:00:10  2018/01/06 00:00:00
2          3  2018/01/04 00:14:00  2017/01/06 00:00:00
3          4  2018/01/04 00:00:00  2018/01/05 00:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...