Python 如何在该函数上迭代输入列表,从而
我想在下面的函数中迭代一个带有输入变量的列表,然后将输出作为csv文件返回。我有一个大的csv文件,我首先要创建一个数据帧。然后我想得到数据帧的某些部分,即某个日期前后的-10天和+10天,以及某个股票 数据框如下所示(这只是一小部分,实际上是2011-2019年期间每天所有股票行情的10万多行) 功能如下。它所做的是过滤股票代码的数据框,然后过滤日期(-10天和+10天) 我想用股票和它们各自的日期在函数上迭代列表,并获得csv格式的输出。 对于输入文件中的每一行,输出应该是20个日期Python 如何在该函数上迭代输入列表,从而,python,pandas,loops,Python,Pandas,Loops,我想在下面的函数中迭代一个带有输入变量的列表,然后将输出作为csv文件返回。我有一个大的csv文件,我首先要创建一个数据帧。然后我想得到数据帧的某些部分,即某个日期前后的-10天和+10天,以及某个股票 数据框如下所示(这只是一小部分,实际上是2011-2019年期间每天所有股票行情的10万多行) 功能如下。它所做的是过滤股票代码的数据框,然后过滤日期(-10天和+10天) 我想用股票和它们各自的日期在函数上迭代列表,并获得csv格式的输出。 对于输入文件中的每一行,输出应该是20个日期 欢迎提
欢迎提供任何提示或帮助考虑构建一个由函数生成的数据帧列表,并与一起编译。此外,不需要单独调用
到_datetime
,因为您可以在以下内容中使用解析_dates
参数:
def获取数据(发行日期、股票代码):
df=pd.read\u csv(r'C:\Users\name\document.csv',parse\u dates=['Date'])
x=-10#设置窗口范围
y=-(x)
日期1=dt.strtime(发布日期,“%m/%d/%Y”)#根据输入匹配
日期之前=日期1+日期时间.timedelta(天=x)
之后的日期=日期1+datetime.timedelta(天=y)
cond1=df['Date']>=在日期之前
cond2=df['Date']似乎效果不错,但如果我不想将我的股票数据列表硬塞进代码中,但就像我以前想做的那样,上传一个包含两列的excel文件,第一列是股票代码,第二列是日期。然后这样做,而不是循环,合并符号上的两个数据框,然后按日期范围过滤。
Date Symbol ShortExemptVolume ShortVolume TotalVolume
2011-01-03 AAWW 0.0 28369 78113.0
2011-01-03 AMD 0.0 3183556 8095093.0
2011-01-03 AMRS 0.0 14196 18811.0
2011-01-03 ARAY 0.0 31685 77976.0
2011-01-03 ARCC 0.0 177208 423768.0
import pandas as pd
from datetime import datetime
import urllib
import datetime
def get_data(issue_date, stock_ticker):
df = pd.read_csv (r'C:\Users\name\document.csv')
df['Date'] = pd.to_datetime(df['Date'], format="%Y%m%d")
x = -10 #set window range
y = -(x)
date_1 = datetime.datetime.strptime(issue_date, "%Y-%m-%d")
before_date = pricing_date = date_1 + datetime.timedelta(days=x) days of issue date
after_date = date_1 + datetime.timedelta(days=y)
cond1 = df['Date'] >= before_date
cond2 = df['Date'] <= after_date
cond3 = df['Symbol'] == 'stock_ticker'
short_data = df[cond1 & cond2 & cond3]
return [short_data]
ARAY 4/24/2014
ACET 11/16/2015
ACET 11/16/2015
AEGR 8/15/2014
ATSG 9/29/2017
def get_data(issue_date, stock_ticker):
df = pd.read_csv (r'C:\Users\name\document.csv', parse_dates=['Date'])
x = -10 #set window range
y = -(x)
date_1 = dt.strptime(issue_date, "%m/%d/%Y") # MATCH ACCORDING TO INPUT
before_date = date_1 + datetime.timedelta(days=x)
after_date = date_1 + datetime.timedelta(days=y)
cond1 = df['Date'] >= before_date
cond2 = df['Date'] <= after_date
cond3 = df['Symbol'] == stock_ticker # REMOVE SINGLE QUOTES
short_data = df[cond1 & cond2 & cond3]
return short_data # REMOVE LIST BRACKETS
stock_date_list = [['ARAY', '4/24/2014'],
['ACET', '11/16/2015'],
['ACET', '11/16/2015'],
['AEGR', '8/15/2014'],
['ATSG', '9/29/2017']]
# LIST COMPREHENSION ITERATIVELY CALLING FUNCTION
df_list = [get_data(i[1], i[0]) for i in stock_date_list)]
# SINGLE DATA FRAME COMPILATION
final_df = pd.concat(df_list, ignore_index=True)