我正在尝试迭代Pandas DataFrame中的序列中的行。我想获取列csv_df['Strike']
的每一行中的值,并将其插入在函数a
中调用的变量K
中。
然后,我希望将输出的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
发布于 2019-05-08 07:45:30
似乎另一种方法是将您的方法单独应用于每个数据框,如:
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']
也许,将计算直接应用于Pandas Series (数据框中的一列)是避免定义只使用一次的方法的一种方法。另外,我不会像你那样在循环中定义一个方法。干杯
ps。我相信你已经忘记在你的方法中返回这两个值了。
def a(S, K):
a1 = 100 * K
a2 = S
return (a1, a2)
https://stackoverflow.com/questions/56031540
复制相似问题