英文:
Pandas "<=" operator unexpected behaviour for datetime
问题
我有一个包含event_datetime
列的分析事件表。
我想要筛选出只包括2天的pandas表,例如,2月1日和2月2日:
event_data.loc[(event_data['event_datetime'] >= '2023-02-01') & (event_data['event_datetime'] <= '2023-02-02')]
但是这段代码只返回了2023-02-01的事件,尽管我写的是小于或等于'2023-02-02'。
在SQL中,这个操作正常工作。我是不是漏掉了什么?在pandas文档中没有找到相关信息...
英文:
I do have an analytics event table with column event_datetime
I want to filter out pandas table for only 2 days, for example, Feb 1st and 2nd:
event_data.loc[(event_data['event_datetime'] >= '2023-02-01') &(event_data['event_datetime'] <= '2023-02-02')]
But this code does return events for 2023-02-01 only, although I wrote less of equal '2023-02-02'.
In sql it works fine. Do I miss something? Did not find anything about it in pandas docs...
答案1
得分: 0
感谢@Galo do Leste和@Nick ODell的提示,问题出在列的日期时间格式上,它没有正确转换为字符串格式。
因此,如果列的类型是日期时间 - 运算符<=
不会按预期工作。在正确将列转换为字符串格式之后
event_data['event_datetime'] = event_data['event_datetime'].dt.strftime('%Y-%m-%d')
- 它可以正常工作。
英文:
Thanks to @Galo do Leste and @Nick ODell hint, the problem was with datetime format of the column - it was not properly converted into str format.
So if column has datetime type - operator <=
doesnt work as it expected.
After proper column casting to string format
event_data['event_datetime'] = event_data['event_datetime'].dt.strftime('%Y-%m-%d')
- it works fine.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论