pandas 中 datetime 和 datetime64[ns] 的比较

Posted

技术标签:

【中文标题】pandas 中 datetime 和 datetime64[ns] 的比较【英文标题】:Comparison between datetime and datetime64[ns] in pandas 【发布时间】:2019-01-20 11:13:11 【问题描述】:

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

我正在使用:

cur_date = datetime.today()

今天的日期。我正在检查今天是否在列中:

bool_val = cur_date in df['date'] #evaluates to false

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

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

cur_date = datetime.strptime(cur_date.strftime('%Y_%m_%d'), '%Y_%m_%d')

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

【问题讨论】:

【参考方案1】:

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

代替:

self.df["date"] = pd.to_datetime(self.df["date"])

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

self.df["date"] = pd.to_datetime(self.df["date"]).dt.date

【讨论】:

【参考方案2】:

你可以使用

pd.Timestamp('today')

pd.to_datetime('today')

但这两个都给出了'now' 的日期和时间。


试试这个:

pd.Timestamp('today').floor('D')

pd.to_datetime('today').floor('D')

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

pd.to_datetime(datetime.datetime.today()).floor('D')

Pandas 还有一个Timedelta 对象

pd.Timestamp('now').floor('D') + pd.Timedelta(-3, unit='D')

或者你可以使用offsets 模块

pd.Timestamp('now').floor('D') + pd.offsets.Day(-3)

要检查成员资格,请尝试其中一种

cur_date in df['date'].tolist()

或者

df['date'].eq(cur_date).any()

【讨论】:

如果我在当前日期前 3 天检查会怎样?当它是一个日期时间对象时,我做了 today = today - timedelta(3) pd.Timestamp('today').floor('D') - pd.offsets.Day(3) 有没有关于to_datetime 将接受什么的资源?它只是归结为试错/阅读源代码的情况吗?文档似乎只是说“arg:整数、浮点数、字符串、日期时间、列表、元组、一维数组、系列”……有点广泛。 总结一下。您所说的资源,是指演示上述所有内容的文档吗? @piRSquared 是的,也许我希望太多,但我的搜索没有得到任何结果,所以我提出了一个最后的问题,看看你是否知道特定的资源。

以上是关于pandas 中 datetime 和 datetime64[ns] 的比较的主要内容,如果未能解决你的问题,请参考以下文章

pandas 中 datetime 和 datetime64[ns] 的比较

mysqlbinlog命令使用

pandas中,类型为datetime.time,如何进行比较?

时间datetime模块

datetime

time模块