pandas TypeError:无法将DateTimeArray强制转换为dtype datetime64 [D]

pinkon5k  于 2023-06-20  发布在  其他
关注(0)|答案(3)|浏览(70)

我最近更新了我的python安装从3.11.2到3.11.3,Pandas版本是2.0.2
我现在得到这个错误:

TypeError: Cannot cast DatetimeArray to dtype datetime64[D]

当我尝试执行此操作时:

df = df[df['CancelDate'].astype('datetime64[D]') >= (datetime.now() - relativedelta(years=2))]

在此dataframe上:

mydataset = {
    'CancelDate': ["2021-09-07", "2021-07-26", "2021-11-01","2015-06-15"]
}

df = pandas.DataFrame(mydataset)

在更新之前,我没有得到给定的错误。有谁能帮我认识到我的错误吗?

tquggr8v

tquggr8v1#

也许我是无知的,但为什么你要把一个特定的日期时间类型放在首位?
顺便说一句,也不需要使用datetime

from dateutil.relativedelta import relativedelta

df[pd.to_datetime(df['CancelDate']) >= (pd.Timestamp.now() - relativedelta(years=2))]
3qpi33ja

3qpi33ja2#

要解决此问题,可以使用pd.pd.to_datetime函数在执行比较之前将“CancelDate”列转换为DatetimeArray

df['CancelDate'] = pd.to_datetime(df['CancelDate'])  # Convert to DatetimeArray
df = df[df['CancelDate'] >= (datetime.now() - relativedelta(years=2))]
mo49yndu

mo49yndu3#

要修复您的问题,您可以使用dt访问器提取CancelDate列的日期组件,然后将其转换为datetime64[D]
例如:

from datetime import datetime
from dateutil.relativedelta import relativedelta
import pandas as pd

mydataset = {
    'CancelDate': ["2021-09-07", "2021-07-26", "2021-11-01","2015-06-15"]
}

df = pd.DataFrame(mydataset)

df['CancelDate'] = pd.to_datetime(df['CancelDate'])
df = df[df['CancelDate'].dt.date >= (datetime.now() - relativedelta(years=2)).date()]

相关问题