Python не конвертирует дату - PullRequest
       13

Python не конвертирует дату

1 голос
/ 23 сентября 2019

У меня есть этот код

X_train= df[df["Date"]<datetime.date.today() - datetime.timedelta(days=30)].drop(Target, axis=1)
y_train= df[df["Date"]<datetime.date.today() - datetime.timedelta(days=30)][Target]

, но я получил эту ошибку

Ошибка типа: '<' не поддерживается между экземплярами 'str' и 'datetime.date' </p>

мое поле Date выглядит следующим образом: «2019-08-07», «2018-11-26»

, поэтому я изменил тип с str на date с помощью

df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%Y-%m-%d')

затем вызвал мой ортогональный код

X_train= df[df["Date"]<datetime.date.today() - datetime.timedelta(days=30)].drop(Target, axis=1)
y_train= df[df["Date"]<datetime.date.today() - datetime.timedelta(days=30)][Target]

, но все равно получаю ту же ошибку

TypeError: '<' не поддерживается между экземплярами 'str' и 'datetime.date '</p>

как это исправить?

Ответы [ 4 ]

1 голос
/ 23 сентября 2019

Вы можете работать с датами с Series.dt.normalize для удаления с Timestamp.normalize:

df['Date'] = pd.to_datetime(df['Date']).dt.normalize()
today = pd.to_datetime('today').normalize()   

Или Series.dt.floor с Timestamp.floor:

df['Date'] = pd.to_datetime(df['Date']).dt.floor('d')
today = pd.to_datetime('today').floor('d') 

А затем фильтр:

X_train= df[df["Date"] < today - pd.Timedelta(days=30)].drop(Target, axis=1)
y_train= df.loc[df["Date"] < today - pd.Timedelta(days=30), 'Target']
0 голосов
/ 24 сентября 2019
df["Date"] = pd.to_datetime(df['Date'], format='%Y-%m-%d')

X_train= df[df["Date"]<datetime.date.today() - datetime.timedelta(days=60)].drop(Target, axis=1)
y_train= df[df["Date"]<datetime.date.today() - datetime.timedelta(days=60)][Target]
0 голосов
/ 23 сентября 2019

проверить тип данных столбца Дата: df[Date].dtype.Если это серия, выполните следующие действия:

X_train= df[(datetime.date.today() - df["Date"].dt.date) > datetime.timedelta(days=30)].drop(Target, axis=1)

Если ее строка преобразует ее в дату и время, как вы упомянули, а затем вызовите указанный выше код.

0 голосов
/ 23 сентября 2019

Вы можете написать это как:

df["Date"] = datetime.datetime.strptime(df["Date"], "%Y-%m-%d").date()

X_train= df[(datetime.date.today() - df["Date"]) > datetime.timedelta(days=30)].drop(Target, axis=1)
...