简体   繁体   English

如何在此 function 上迭代输入列表,因此

[英]How do I iterate an input list over this function and consequently

I want to iterate a list with input variables over the following function, to then consequently return the output as a csv file.我想在以下 function 上迭代带有输入变量的列表,然后将 output 作为 csv 文件返回。 I have a big csv file which I first important to create a dataframe.我有一个大的 csv 文件,我首先要创建一个 dataframe。 I then want to get certain part of the dataframe, namely, the -10 days and +10 days around a certain date and for a certain stock.然后我想获得 dataframe 的某些部分,即某个日期和某个库存的 -10 天和 +10 天。

The dataframe looks as follows (this is just a small part, in reality its 100k+ rows, for every day, all stock tickers, for the period 2011 - 2019) dataframe 如下所示(这只是一小部分,实际上它的 100k+ 行,对于 2011 年至 2019 年期间的所有股票代码,每天都有)

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

The function is as follows. function如下。 What it does is it filters the dataframe for the stock ticker and then the dates (-10 and +10 days around a given specific date).它的作用是过滤 dataframe 的股票代码,然后过滤日期(给定特定日期的 -10 天和 +10 天)。

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]

I have a list with a couple hundred rows that contain a specific stock ticker and issue date, for example like this:我有一个包含数百行的列表,其中包含特定的股票代码和发行日期,例如:

ARAY    4/24/2014
ACET    11/16/2015
ACET    11/16/2015
AEGR    8/15/2014
ATSG    9/29/2017

I would like to iterate the list with stocks and their respective date, over the function and get the output in csv format.我想在 function 上用股票及其各自的日期迭代列表,并以 csv 格式获取 output。 The output should be 20 dates for every row in the input file. output 应该是输入文件中每一行的 20 个日期。

Any tips or help is welcome欢迎任何提示或帮助

Consider building a list of data frames generated from function and compile together with concat .考虑构建从 function 生成的数据帧列表并与concat一起编译。 Also, there is no need to separately call to_datetime as you can use parse_dates argument in read_csv :此外,无需单独调用to_datetime ,因为您可以在read_csv中使用parse_dates参数:

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM