我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。
实现这一目标的最佳方式是什么?
我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。
实现这一目标的最佳方式是什么?
当前回答
按日期过滤数据帧的最短方法: 假设你的日期列的类型是datetime64[ns]
# filter by single day
df_filtered = df[df['date'].dt.strftime('%Y-%m-%d') == '2014-01-01']
# filter by single month
df_filtered = df[df['date'].dt.strftime('%Y-%m') == '2014-01']
# filter by single year
df_filtered = df[df['date'].dt.strftime('%Y') == '2014']
其他回答
你可以用pd。时间戳来执行查询和本地引用
import pandas as pd
import numpy as np
df = pd.DataFrame()
ts = pd.Timestamp
df['date'] = np.array(np.arange(10) + datetime.now().timestamp(), dtype='M8[s]')
print(df)
print(df.query('date > @ts("20190515T071320")')
输出
date
0 2019-05-15 07:13:16
1 2019-05-15 07:13:17
2 2019-05-15 07:13:18
3 2019-05-15 07:13:19
4 2019-05-15 07:13:20
5 2019-05-15 07:13:21
6 2019-05-15 07:13:22
7 2019-05-15 07:13:23
8 2019-05-15 07:13:24
9 2019-05-15 07:13:25
date
5 2019-05-15 07:13:21
6 2019-05-15 07:13:22
7 2019-05-15 07:13:23
8 2019-05-15 07:13:24
9 2019-05-15 07:13:25
看看DataFrame的pandas文档。查询,特别是提到局部变量引用udsing @前缀。在这种情况下,我们引用pd。使用本地别名ts来提供时间戳字符串
如果您已经使用pd将字符串转换为日期格式。To_datetime你可以使用:
df = df [(df[日期]>”2018-01-01”)及(df[日期]<”2019-07-01”)
用pyjanitor怎么样
它有很酷的功能。
pip后安装pyjanitor
import janitor
df_filtered = df.filter_date(your_date_column_name, start_date, end_date)
如果日期在索引中,则简单地:
df['20160101':'20160301']
我还不允许写评论,所以我会写一个答案,如果有人读了所有的评论,并找到了这个。
如果数据集的索引是一个日期时间,并且您想仅通过(例如)月份过滤它,您可以执行以下操作:
df.loc[df.index.month == 3]
它将在3月份为您过滤数据集。