我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。

实现这一目标的最佳方式是什么?


当前回答

用pyjanitor怎么样

它有很酷的功能。

pip后安装pyjanitor

import janitor

df_filtered = df.filter_date(your_date_column_name, start_date, end_date)

其他回答

按日期过滤数据帧的最短方法: 假设你的日期列的类型是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']

因此,在加载csv数据文件时,我们需要将日期列设置为索引,如下所示,以便根据日期范围筛选数据。现在已弃用的方法:pd.DataFrame.from_csv()不需要这样做。

如果您只想显示1月至2月两个月的数据,例如2020-01-01至2020-02-29,您可以这样做:

import pandas as pd
mydata = pd.read_csv('mydata.csv',index_col='date') # or its index number, e.g. index_col=[0]
mydata['2020-01-01':'2020-02-29'] # will pull all the columns
#if just need one column, e.g. Cost, can be done:
mydata['2020-01-01':'2020-02-29','Cost'] 

这已经在Python 3.7中进行了测试。希望这对你有用。

# 60 days from today
after_60d = pd.to_datetime('today').date() + datetime.timedelta(days=60)
# filter date col less than 60 days date
df[df['date_col'] < after_60d]

如果日期在索引中,则简单地:

df['20160101':'20160301']

如果date列是索引,则使用.loc进行基于标签的索引,或使用.iloc进行位置索引。

例如:

df.loc['2014-01-01':'2014-02-01']

详情见这里http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection

如果列不是索引,你有两个选择:

将其作为索引(如果是时间序列数据,可以是临时索引,也可以是永久索引) df [(df(“日期”)> 2013-01-01)& (df(“日期”)< ' 2013-02-01 '))

请看这里的一般解释

注意:.ix已弃用。