首页 > 解决方案 > Pandas 根据日期过滤行

问题描述

一直在编写代码以通过一些公式推送股票数据以帮助选择我想要的东西。为确保公式有效,希望对公式的预测进行回测(模拟)。原始数据表行从 2009 年 1 月 1 日到 2019 年 12 月 2 日,列公司 1、公司 2 等(99 比较)

我在 Excel 中制作单独的表格,即从 2009-1-1 到 2018-10-1 并通过 python 运行它 - 然后看看 2018-11-1 结果会是什么。结果我很满意..... 即 22% 的回报,但我手动剪切了输入数据

认为自动化很简单(在 DF 中剪切原始数据并将其输入模型)。

问题是,数据变得混乱,我尝试了很多选择,但仍然无法弄清楚原因。阅读有关该主题的几乎所有主题。不胜感激。

看起来很傻,但我很生气

import pandas as pd
import numpy as np

from datetime import date, timedelta

#read stock_price.csv file and sort by date
df_price = pd.read_csv("tests/stock_prices.csv")
df_price['date']= pd.to_datetime(df_price['date'])
#df_price.set_index('date', drop=True, append=False, inplace=True, verify_integrity=False)

#this is where it goes wrong
df_price_filter = df_price[df_price["date"].isin(pd.date_range("2009-01-01", "2018-09-28"))]
df_price_filter.sort_values(by='date')

print(df_price_filter)
pd.DataFrame(df_price_filter).to_csv('CGResults/5_data_2018-09_28.csv',index=True)

标签: pandasdatefilter

解决方案


这应该这样做:

start_date = "2009-01-01"
end_date = "2018-09-28"
date_filter = (df_price["date"] >= start_date) & (df_price["date"] <= end_date)
df_price_filter = df_price[date_filter]
df_price_filter = df_price_filter.sort_values(by='date')

推荐阅读