在遍历pandas数据框之前,如何找出支持哪些操作数?

时间:2019-05-07 23:10:26

标签: python-3.x pandas loops iteration python-3.6

我正在尝试遍历Pandas DataFrame中Series中的行。我想在列csv_df['Strike']的每一行中取值并将其插入变量K中,该变量在函数a中被调用。

然后,我希望将输出a1a2放在DataFrame中自己的列中。

我收到错误:TypeError: unsupported operand type(s) for *: 'int' and 'zip',我认为,如果可以找出支持哪些操作数,就可以将a1a2转换为该错误。

我正确地考虑了吗?

注意: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 :(得分:0)

看来,您想要做的另一种方法是将您的方法分别应用于每个数据帧,如:

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']

也许直接将计算应用于“熊猫系列”(数据框的一列)是避免定义仅使用一次的方法的一种方法。 另外,我不会像在循环中那样定义方法。 干杯

ps。我相信您忘记了在方法中返回两个值。

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