Как Я Могу Превратить Строку Месяца В Панд Даты И Времени?

#python #pandas #date

Вопрос:

В настоящее время у меня есть строка в формате месяц год. Месяц состоит из 3 символов, а год-из 4. Ниже приведены некоторые примеры некоторых дат, которые у меня есть.

 apr2021
jun2021
mar2020
dec2020
 

У меня есть дата в фрейме данных pandas, которая имеет форму гггг-мм-дд чч:мм:сс. Я хочу сравнить эту строку с датой в панд и определить, меньше она или равна ей? Есть ли способ превратить эту строку за месяц в формат фактической даты?

Я собираюсь изменить дату на гггг-мм-дд, а затем попытаться получить строку месяца и года в том же формате, а затем провести прямое сравнение. Я не совсем уверен, есть ли более эффективный способ сделать это, хотя?

Пример псевдокода ниже:

 temp_date = apr2021 -> 01-04-2021
pandas_date = 29-03-2021

if temp_date < pandas_date:
    do x
else:
    do y
 

Ответ №1:

Вы можете использовать pandas.to_datetime для преобразования ваших дат, как во фрейме данных, так и для изолированной строки. Затем вы сможете проводить сравнения с использованием > / < или методов pandas gt / lt /…:

 import pandas as pd
df = pd.DataFrame({'temp_date': ['apr2021', 'jun2021', 'mar2020', 'dec2020']})
df['temp_date'] = pd.to_datetime(df['temp_date'])

pandas_date = pd.to_datetime('29-03-2021') # optional

import numpy as np

df['new_col'] = np.where(df['temp_date'].gt(pandas_date), 'greater', 'lower')
 

выход:

    temp_date  new_col
0 2021-04-01  greater
1 2021-06-01  greater
2 2020-03-01    lower
3 2020-12-01    lower
 

ПРИМЕЧАНИЕ. следуя комментарию, в datetime документации есть полный список форматов даты и времени, в вашем случае это будет %b%Y : pd.to_datetime('apr2021', format='%b%Y')

Комментарии:

1. Спасибо! Я понятия не имел, что параметр _datetime будет работать с такими строками, так как, похоже, он находится в нестандартном формате. Это определенно то, что мне было нужно. Еще раз спасибо!

2. Даже если у вас нестандартный формат , который вы можете использовать для передачи формата format="…" , проверьте документацию, указанную в моем ответе 😉 В вашем случае это было бы pd.to_datetime('apr2021', format='%b%Y')

Ответ №2:

pd.to_datetime это то, что вы ищете.

 >>> import pandas as pd
>>> pd.to_datetime("apr2021")
Timestamp('2021-04-01 00:00:00')