Как преобразовать столбец DataFrame в дату в Pandas
-
Функция Pandas
to_datetime
для преобразования столбца DataFrame в datetime -
DataFrame
apply
Метод преобразования столбца DataFrame в Datetime - Методы преобразования преобразования столбца DataFrame в сравнение производительности по дате
Мы познакомим вас с методами преобразования столбца Pandas DataFrame в Python datetime
.
- Функция Pandas
to_datetime()
. - Метод DataFrame
apply
для работы с элементами в колонке
В этой статье мы будем использовать тот же самый DataFrame, что и ниже.
>>> from datetime import datetime, timedelta
>>> from pandas import DataFrame
>>> df = DataFrame.from_items(
[('Alfa', [1, 2, 3]),
('Bravo', [4, 5, 6]),
('Datetime', [datetime.strftime(datetime.now()-timedelta(days=_), "%m/%d/%Y, %H:%M:%S") for _ in range(3)])],
orient='index',
columns=['A', 'B', 'C']).T
>>> df
Alfa Bravo Datetime
A 1 4 12/07/2019, 14:08:55
B 2 5 12/06/2019, 14:08:55
C 3 6 12/05/2019, 14:08:55
Функция Pandas to_datetime
для преобразования столбца DataFrame в datetime
Функция Pandas to_datetime
преобразует данный аргумент в datetime
.
pandas.to_datetime(param, format="")
Формат задает шаблон строки даты. То же самое с форматом в stftime
или strptime
в модуле Python datetime
.
>>> df
Alfa Bravo Datetime
A 1 4 12/07/2019, 14:08:55
B 2 5 12/06/2019, 14:08:55
C 3 6 12/05/2019, 14:08:55
>>> df['Datetime'] = pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
>>> df
Alfa Bravo Datetime
A 1 4 2019-12-07 14:08:55
B 2 5 2019-12-06 14:08:55
C 3 6 2019-12-05 14:08:55
Функция to_datetime()
не модифицирует данные DataFrame
на месте, поэтому нам нужно присвоить возвращаемые Панды Series
конкретному столбцу DataFrame
.
to_datetime()
Функция умна для преобразования в Datetime
Функция to_datetime()
может выполнять преобразование в datetime
умным способом без указания строки формата datetime
. Она автоматически и умно найдет строковый шаблон.
>>> df['Datetime'] = pd.to_datetime(df['Datetime'])
>>> df
Alfa Bravo Datetime
A 1 4 2019-12-07 14:08:55
B 2 5 2019-12-06 14:08:55
C 3 6 2019-12-05 14:08:55
Несмотря на то, что to_datetime
может делать свою работу, не давая format
умно, скорость преобразования намного ниже, чем при format
.
Мы могли бы установить опцию infer_datetime_format
из to_datetime
в True
, чтобы переключить преобразование в более быстрый режим, если формат строки даты можно было бы вывести без указания format
строки.
Это может увеличить скорость разбора в 5~6 раз.
DataFrame apply
Метод преобразования столбца DataFrame в Datetime
apply(func, *args, **kwds)
Метод apply
B DataFrame
применяет функцию func
к каждому столбцу или строке.
Для простоты мы могли бы использовать функцию lambda
вместо func
.
>>> df['Datetime'] = df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
>>> df
Alfa Bravo Datetime
A 1 4 2019-12-07 14:44:35
B 2 5 2019-12-06 14:44:35
C 3 6 2019-12-05 14:44:35
Методы преобразования преобразования столбца DataFrame в сравнение производительности по дате
Давайте используем timeit
для сравнения временной производительности обоих методов, представленных в этой статье.
In [1]: %timeit pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
452 µs ± 85.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [2]: %timeit df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
377 µs ± 58.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Метод apply
даже немного лучше, чем родной метод Pandas to_datetime
, при этом около 80% времени исполнения функции to_datetime
.