如何根据完全匹配的日期值过滤pandas数据帧

时间:2017-09-27 16:32:15

标签: python pandas numpy dataframe

我一直在尝试过滤特定日期的数据框,尽管数据框中存在日期,但它没有返回任何结果

基于查询的数据框中的数据

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']

它只返回一个没有结果的空数据框

StaffID     Date

我的数据框列类型是

StaffID                int64
Date          datetime64[ns]

我已经通过比较数据框架日期与字符串以及将字符串日期转换为 datetime64 [ns] 来尝试上述查询仍然是相同的结果任何帮助请将不胜感激

3 个答案:

答案 0 :(得分:0)

您可以进行字符串比较

$all_subs = \Stripe\Subscription::all(
             array(
                 "plan" => $group_plan_id,
                 "status" => "all",
                 "limit" => 100
             )
         );
$statuses = array('active','trialing');
foreach ($all_subs->data as $sub) {
    if (!in_array($sub->status,$statuses)) {
        continue;
    }

    // do some code here
}

答案 1 :(得分:0)

使用dt.date astype string然后比较即

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

答案 2 :(得分:0)

我使用的日期是'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

这只会从我的日期列中提取日期并替换有时间的旧列

信用:Wen在评论中回答了我。