#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')