使用Pandas过滤和比较日期

Fed*_*rza 6 datetime pandas

我想知道如何在所有不同的时间级别过滤不同的日期,即按年,月,日,小时,分钟和/或日查找日期.例如,如何查找2014年或2014年1月或2014年1月2日发生的所有日期,或者......到第二个?

所以我有从pd.to_datetime生成的日期和时间数据

df
    timeStamp
0   2014-01-02 21:03:04
1   2014-02-02 21:03:05
2   2016-02-04 18:03:10
Run Code Online (Sandbox Code Playgroud)

因此,如果我按2014年过滤,那么我会得到输出:

    timeStamp
0   2014-01-02 21:03:04
1   2014-02-02 21:03:05
Run Code Online (Sandbox Code Playgroud)

或者作为一个不同的例子,我想知道2014年和每个月的第二天发生的日期.这也会导致:

    timeStamp
0   2014-01-02 21:03:04
1   2014-02-02 21:03:05
Run Code Online (Sandbox Code Playgroud)

但是,如果我要求在2014年1月2日发生的日期

    timeStamp
0   2014-01-02 21:03:04
Run Code Online (Sandbox Code Playgroud)

我怎样才能在不同层面实现这一目标?

另外,如何比较这些不同级别的日期以创建布尔索引数组?

And*_*w L 10

您可以通过布尔索引来过滤数据帧,如下所示:

df.loc[df['timeStamp'].dt.year == 2014]
df.loc[df['timeStamp'].dt.month == 5]
df.loc[df['timeStamp'].dt.second == 4]
df.loc[df['timeStamp'] == '2014-01-02']
df.loc[pd.to_datetime(df['timeStamp'].dt.date) == '2014-01-02']
Run Code Online (Sandbox Code Playgroud)

... 等等等等.

  • 感谢您的回复。前三个工作但不是第四个,它生成一个空的数据帧。这就是我偶然发现的问题,但我想将其概括为日期和时间的每个部分,以及所有不同的可能组合。 (2认同)
  • 抱歉,我没有在想。`df ['timeStamp']。dt.date`将返回一个`object`,因此您需要转换回`datetime46`。参见上面的编辑。如果可以解决,请接受作为答案! (2认同)