Как я могу выяснить, какие операнды поддерживаются перед циклом через фрейм данных pandas? - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь перебрать строки в Серии внутри Pandas DataFrame. Я хотел бы взять значение в каждой строке столбца csv_df['Strike'] и вставить его в переменную K, которая вызывается в функции a.

Затем я хочу, чтобы выходные данные a1 и a2 были помещены в свои собственные столбцы внутри DataFrame.

Я получаю сообщение об ошибке: TypeError: unsupported operand type(s) for *: 'int' and 'zip', и я полагаю, что если я смогу узнать, какие операнды поддерживаются, я мог бы преобразовать a1 и a2 в это.

Правильно ли я думаю об этом?

Примечание: S - это просто статическое число, поскольку df - это всего одна строка, тогда как K имеет много строк.

Код ниже:

from scipy.stats import norm
from math import sqrt, exp, log, pi
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import fix_yahoo_finance as yf
yf.pdr_override()
import numpy as np
import datetime
from pandas_datareader import data, wb
import matplotlib.pyplot as plt

#To get data:

start = datetime.datetime.today()
end = datetime.datetime.today()
df = data.get_data_yahoo('AAPL', start, end) #puts data into a pandas dataframe

csv_df = pd.read_csv('./AAPL_TEST.csv')

for row in csv_df.itertuples():

    def a(S, K):
        a1 = 100 * K
        a2 = S
        return a1

    S = df['Adj Close'].items()
    K = csv_df['strike'].items()

    a1, a2 = a(S, K)

    df['new'] = a1
    df['new2'] = a2

1 Ответ

0 голосов
/ 08 мая 2019

Кажется, что альтернативным способом сделать то, что вы хотите, было бы применить ваш метод к каждому фрейму данных отдельно, как в:

df = data.get_data_yahoo('AAPL', start, end)
csv_df = pd.read_csv('./AAPL_TEST.csv')

df['new'] = csv_df['strike'].apply(lambda x: 100 * x)
df['new2'] = df['Adj Close']

Возможно, применяя вычисления непосредственно к Серии Панд (столбецвашего фрейма данных) - это способ избежать определения метода, который используется только один раз.Кроме того, я бы не стал определять метод внутри цикла, как у вас.Приветствия

пс.Я полагаю, что вы забыли вернуть оба значения в вашем методе.

def a(S, K):
        a1 = 100 * K
        a2 = S
        return (a1, a2)
...