我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。
实现这一目标的最佳方式是什么?
我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。
实现这一目标的最佳方式是什么?
当前回答
如果你的日期是通过导入datetime包来标准化的,你可以简单地使用:
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
使用datetime包来标准化你的日期字符串,你可以使用这个函数:
import datetime
datetime.datetime.strptime
其他回答
因此,在加载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中进行了测试。希望这对你有用。
如果你想使用.query()方法,这是另一种解决方案。
它允许你使用编写可读的代码,如.query(f"{start} < MyDate < {end}")的权衡,.query()解析字符串,列值必须是熊猫日期格式(这样。query()也可以理解)
df = pd.DataFrame({
'MyValue': [1,2,3],
'MyDate': pd.to_datetime(['2021-01-01','2021-01-02','2021-01-03'])
})
start = datetime.date(2021,1,1).strftime('%Y%m%d')
end = datetime.date(2021,1,3).strftime('%Y%m%d')
df.query(f"{start} < MyDate < {end}")
(下面是@Phillip Cloud的评论,@Retozi的回答)
导入熊猫文库
进口熊猫作为pd
步骤1:使用pd.to_datetime()方法将日期列转换为字符串
df['date']=pd.to_datetime(df["date"],unit='s')
第二步:以任何预定的方式进行筛选(即2个月)
df = df[(df["date"] >"2022-03-01" & df["date"] < "2022-05-03")]
步骤3:检查输出
print(df)
如果你的日期是通过导入datetime包来标准化的,你可以简单地使用:
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
使用datetime包来标准化你的日期字符串,你可以使用这个函数:
import datetime
datetime.datetime.strptime
用pyjanitor怎么样
它有很酷的功能。
pip后安装pyjanitor
import janitor
df_filtered = df.filter_date(your_date_column_name, start_date, end_date)