Изменение формата даты и времени, который включает день недели?

#python #pandas #date #datetime #timestamp

#python #панды #Дата #дата и время #временная метка

Вопрос:

В настоящее время у меня есть столбец даты и времени в этом формате

         Datime
        Thu Jun 18 23:04:19  0000 2020
        Thu Jun 18 23:04:18  0000 2020
        Thu Jun 18 23:04:14  0000 2020
        Thu Jun 18 23:04:13  0000 2020
 

Я хочу изменить его на:

    Datetime
 2020-06-18 23:04:19
 2020-06-18 23:04:18
 2020-06-18 23:04:14
 2020-06-18 23:04:13
 

Ответ №1:

Предполагая, что вы загрузили фрейм данных pandas, вы можете преобразовать Datetime столбец в указанный формат с помощью этой функции. Вы можете переименовать эту функцию.

 import datetime

def modify_datetime(dtime):
    my_time = datetime.datetime.strptime(dtime, '%a %b %d %H:%M:%S %z %Y')
    return my_time.strftime('%Y-%m-%d %H:%M:%S')
 

Первый аргумент strptime функции — строка даты, а второй аргумент — формат.

 Directive, Description

%a         Weekday abbreviated
%b         Month abbreviated name
%d         Day of the month
%H         Hour (24-hour format)
%M         Minute with zero padding
%S         Second with zero padding
%z         UTC offset
%Y         Full year
 

После преобразования строки date в datetime объекты вы можете преобразовать ее обратно в строку с указанным форматом с помощью strftime функции. Вы можете прочитать больше о форматах здесь.

Наконец, просто измените Datetime столбец

 df['Datetime'] = df['Datetime'].apply(modify_datetime)
 

Ответ №2:

Вы можете использовать pandas.to_datetime и pandas.Series.dt.strftime соответствующим образом:

 >>> import pandas as pd
>>> from datetime import datetime
>>> datetime_strs = ["Thu Jun 18 23:04:19  0000 2020", "Thu Jun 18 23:04:18  0000 2020", "Thu Jun 18 23:04:14  0000 2020", "Thu Jun 18 23:04:13  0000 2020"]
>>> d = {'Datetimes': datetime_strs}
>>> df = pd.DataFrame(data=d)
>>> df
                        Datetimes
0  Thu Jun 18 23:04:19  0000 2020
1  Thu Jun 18 23:04:18  0000 2020
2  Thu Jun 18 23:04:14  0000 2020
3  Thu Jun 18 23:04:13  0000 2020
>>> df['Datetimes'] = pd.to_datetime(df['Datetimes'], format='%a %b %d %H:%M:%S %z %Y')
>>> df
                  Datetimes
0 2020-06-18 23:04:19 00:00
1 2020-06-18 23:04:18 00:00
2 2020-06-18 23:04:14 00:00
3 2020-06-18 23:04:13 00:00
>>> df['Datetimes'] = df['Datetimes'].dt.strftime('%Y-%m-%d %H:%M:%S')
>>> df
             Datetimes
0  2020-06-18 23:04:19
1  2020-06-18 23:04:18
2  2020-06-18 23:04:14
3  2020-06-18 23:04:13