如何过滤pandas Dataframe 基于日期值与精确匹配

x7yiwoj4  于 2023-09-29  发布在  其他
关注(0)|答案(4)|浏览(109)

我一直在尝试过滤特定日期的数据框,尽管数据框中存在该日期,但未返回任何结果
基于查询的数据框中的数据

df[df['Date'] > '2017-03-20']

返回此结果

StaffID     Date        
90047   2017-03-20 19:00:00     
90049   2017-03-20 19:00:00     
90049   2017-03-27 19:00:00

虽然当我运行此查询时

df[df['Date'] == '2017-03-20']

df.loc[df['Date'] == '2017-03-20']

它没有返回任何结果,只是一个空的 Dataframe

StaffID     Date

我的数据框列类型为

StaffID                int64
Date          datetime64[ns]

我已经尝试了上述查询,通过比较 Dataframe 日期与字符串,以及通过转换字符串日期到**datetime64[ns]**仍然相同的结果,请任何帮助将不胜感激

pvcm50d1

pvcm50d11#

使用dt.date astype字符串,然后比较,即

df[df['Date'].dt.date.astype(str) == '2017-03-20']

输出量:

StaffID                Date
0    90047 2017-03-20 19:00:00
1    90049 2017-03-20 19:00:00
am46iovg

am46iovg2#

可以进行字符串比较

df[df['Date'].astype(str).str[:10] == '2017-03-20']

    StaffID Date
0   90047   2017-03-20 19:00:00
1   90049   2017-03-20 19:00:00
j8yoct9x

j8yoct9x3#

我使用的日期是 '2017 -03-20 19:00:00'**这是>'2017 -03-20 00:00:00'**这就是为什么它没有比较它的权利,最好的方法是

df.Date = df.Date.dt.date
dateToMatch = np.datetime64('2017-03-20')
df[df.Date == dateToMath]

以上代码返回

StaffID     Date
0   90047   2017-03-20
1   90049   2017-03-20

这将只提取日期从我的日期列,并取代旧列有时间
信用:温谁回答我在评论.

zazmityj

zazmityj4#

在数据类型、格式等方面,日期往往有点棘手。这是非常重要的,以确保你是比较苹果苹果。例如,你可以得到

today = date.today()
thismonth = today.strftime("%m") #gives 09 not 9 for Sept

如果你想把它和Pandas约会相提并论,那就没什么好处了。见鬼,你甚至可以像这样把它转换成int

m1 = today.strftime("%-m") #gives 9 for Sept
m2 = int(m1)

对你一点好处都没有这是因为pandas有自己的pandas.timestamp类,它使用numpy数据类型来表示日期。举例来说:

df = df.loc[df['Date'].dt.month == m2

上面的方法不起作用,因为你是在比较int32和int。在本例中,您将pandas.Series.dt.month返回的int32数据类型与int进行比较。它不会工作,你会得到nada,什么都没有,zip,zilch,鹅蛋。相反,你必须做:

m1 = pd.Timestamp.today()
df = df.loc[df['Date'].dt.month == m1.month]

我必须弄清楚,因为我想自动过滤当前的月份和时间量,它花了我想出如何做到这一点只是不敬虔。

相关问题