pandas中datetime和datetime64 [ns]之间的比较

Jes*_*roe 2 python datetime pandas datetime64

我正在编写一个检查excel文件的程序,如果今天的日期在excel文件的日期列中,我会解析它

我正在使用:

cur_date = datetime.today()
Run Code Online (Sandbox Code Playgroud)

为今天的约会.我正在检查今天是否在列中:

bool_val = cur_date in df['date'] #evaluates to false
Run Code Online (Sandbox Code Playgroud)

我确实知道今天的日期在相关文件中.该系列的dtype是datetime64 [ns]

此外,我只检查日期本身而不是之后的时间戳,如果这很重要的话.我这样做是为了使时间戳00:00:00:

cur_date = datetime.strptime(cur_date.strftime('%Y_%m_%d'), '%Y_%m_%d')
Run Code Online (Sandbox Code Playgroud)

打印后该对象的类型也是日期时间

bla*_*vvv 24

对于在将数据框日期与可变日期进行比较时也偶然发现这一点的任何人,这并不能完全回答您的问题;您可以使用下面的代码。

代替:

self.df["date"] = pd.to_datetime(self.df["date"])
Run Code Online (Sandbox Code Playgroud)

您可以导入日期时间,然后将 .dt.date 添加到末尾,例如:

self.df["date"] = pd.to_datetime(self.df["date"]).dt.date
Run Code Online (Sandbox Code Playgroud)

  • 是的,这解决了它!+1 (3认同)

Jer*_*dev 8

使用转换 datetime64 类型时,pd.Timestamp()请务必注意,应将其与其他时间戳类型进行比较。(不是 datetime.date 类型)


将日期转换为 numpy.datetime64

date = '2022-11-20 00:00:00'
date64 = np.datetime64(date)
Run Code Online (Sandbox Code Playgroud)

7 天前 - 时间戳类型

sevenDaysAgoTs = (pd.to_datetime('today')-timedelta(days=7))
Run Code Online (Sandbox Code Playgroud)

将 date64 转换为时间戳并查看是否在最近 7 天内

print(pd.Timestamp(pd.to_datetime(date64)) >= sevenDaysAgoTs)
Run Code Online (Sandbox Code Playgroud)


piR*_*red 5

您可以使用

pd.Timestamp('today')
Run Code Online (Sandbox Code Playgroud)

要么

pd.to_datetime('today')
Run Code Online (Sandbox Code Playgroud)

但是这两个都给出了日期和时间'now'.


试试这个:

pd.Timestamp('today').floor('D')
Run Code Online (Sandbox Code Playgroud)

要么

pd.to_datetime('today').floor('D')
Run Code Online (Sandbox Code Playgroud)

您也可以将datetime对象传递给pandas.to_datetime我,但我喜欢另一个选项mroe.

pd.to_datetime(datetime.datetime.today()).floor('D')
Run Code Online (Sandbox Code Playgroud)

熊猫也有一个Timedelta对象

pd.Timestamp('now').floor('D') + pd.Timedelta(-3, unit='D')
Run Code Online (Sandbox Code Playgroud)

或者您可以使用该offsets模块

pd.Timestamp('now').floor('D') + pd.offsets.Day(-3)
Run Code Online (Sandbox Code Playgroud)

要检查成员资格,请尝试以下方法之一

cur_date in df['date'].tolist()
Run Code Online (Sandbox Code Playgroud)

要么

df['date'].eq(cur_date).any()
Run Code Online (Sandbox Code Playgroud)

  • `pd.Timestamp('今天').floor('D') - pd.offsets.Day(3)` (3认同)