Как мне перебрать список ввода для этой функции и, следовательно, - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу перебрать список с входными переменными над следующей функцией, чтобы затем вернуть результат в виде CSV-файла.У меня есть большой CSV-файл, который мне в первую очередь важен для создания фрейма данных.Затем я хочу получить определенную часть кадра данных, а именно, -10 дней и +10 дней вокруг определенной даты и для определенной акции.

Фрейм данных выглядит следующим образом (это лишь небольшая часть, в действительности это 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

Функция заключается в следующем.Он фильтрует фрейм данных для биржевого тикера и затем дат (-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]

У меня есть список из пары сотен строк, которые содержатконкретный тикер акций и дату выпуска, например, вот так:

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

Я хотел бы перебрать список с акциями и их соответствующей датой по функции и получить выходные данные в формате csv.Выходные данные должны содержать 20 дат для каждой строки входного файла.

Любые советы или помощь приветствуются

1 Ответ

0 голосов
/ 26 сентября 2019

Рассмотрим создание списка фреймов данных, сгенерированных из функции, и скомпилируем вместе с concat.Кроме того, нет необходимости отдельно вызывать to_datetime, так как вы можете использовать parse_dates аргумент в read_csv:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...