Pandas Dataframe,How do I filter a dataframe on the date column,大于1月1日的5年前

vktxenjb  于 2023-08-01  发布在  其他
关注(0)|答案(2)|浏览(99)

我在pandas中有一个数据框架,我想过滤它。如何过滤它,使它只包含大于5年前1月1日的行?
用下面的代码,我得到了错误:TypeError:无法比较datetime.date时间和datetime.date

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime 
from dateutil.relativedelta import relativedelta

sns.set()

df = pd.read_excel("Data.xlsx", sheet_name='Seasonality')

df = df[1:]
df = df.rename(columns = {df.columns[0]: 'Date', df.columns[1]: 'WTI', df.columns[2]: 'RBOB'})
print(df)

today = date.today()
fiveYrAgo = date.today() - relativedelta(years=5)
seasStart = datetime.date(int(today.year-5),1,1)

dfSeas = df[(df['Date'] > seasStart)]

字符串

bf1o4zei

bf1o4zei1#

根据您的代码,seasStart似乎是一个datetime.date对象。
将该对象转换为datetime.datetime:

seasStart = pd.to_datetime(seasStart)

字符串

oxcyiej7

oxcyiej72#

最后我选择了另一个解决方案:
将“Date”列转换为datetime,然后使用字符串过滤数据框以获得所需日期

df = pd.read_excel("Data.xlsx", sheet_name='Seasonality')

df = df[1:]
df = df.rename(columns = {df.columns[0]: 'Date', df.columns[1]: 'WTI', df.columns[2]: 'RBOB'})
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
dfColumns = list(df.columns.values)
dfColumns = dfColumns[1:]
today = date.today()

dfSeas = df[(df['Date'] > str(today.year-5) + "-1-1")].copy()
dfSeas['Year'] = dfSeas['Date'].dt.year
dfSeas['Month'] = dfSeas['Date'].dt.month
dfSeas['Week'] = dfSeas['Date'].dt.isocalendar().week
dfSeas

字符串

相关问题