Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 结合三种功能_Python_List_Function_For Loop - Fatal编程技术网

Python 结合三种功能

Python 结合三种功能,python,list,function,for-loop,Python,List,Function,For Loop,我创建了以下脚本: 1.function1从yahoo finance获取数据并将其放入DataFrame,然后对所有股票执行此操作 2.函数2执行滚动回归并将残差保存到列表中。 我想对每个入库函数1重复函数2,取残差的标准偏差,同时将输出保存到最终列表中。 我似乎不知道如何组合这些功能。任何帮助都将不胜感激 更新: 我现在的问题是,该脚本只适用于最后一个库存清单。也就是说,脚本只在xx列表中添加一个数字,而不是在所有股票中循环,从每个股票中获取(0,90)范围,然后为每个股票添加一个stde

我创建了以下脚本: 1.function1从yahoo finance获取数据并将其放入DataFrame,然后对所有股票执行此操作 2.函数2执行滚动回归并将残差保存到列表中。 我想对每个入库函数1重复函数2,取残差的标准偏差,同时将输出保存到最终列表中。 我似乎不知道如何组合这些功能。任何帮助都将不胜感激

更新:

  • 我现在的问题是,该脚本只适用于最后一个库存清单。也就是说,脚本只在xx列表中添加一个数字,而不是在所有股票中循环,从每个股票中获取(0,90)范围,然后为每个股票添加一个stdev编号
当我执行最后一个函数(stdev(xx,xxx)时,我不确定如何对库存清单和范围(0,90)内的n使用

非常感谢任何帮助

更新代码如下:

def stockprice(stock, y, X, xx, xxx):
        try:
            start = datetime.datetime(2016,8,1)
            end = datetime.datetime(2017,1,1)
            f = web.get_data_yahoo(stock, start, end, interval='d')
            f.drop(f.columns[[0,1,2,3,4]], axis=1, inplace=True)
            f['LnReturn'] = np.log(f['Adj Close']) - np.log(f['Adj Close'].shift(1))
            data2 = pd.concat([f,kf], axis = 1)
            data2['XRtrn'] = (data2['LnReturn']*100 - data2['RF'])
            df = data2[np.isfinite(data2['XRtrn'])]
            df = pd.DataFrame(df)
            y = df['XRtrn'].shift(-1)
            y = y.dropna()
            y = pd.DataFrame(y)
            x = df.ix[:,[2,3,4]]
            x = x[:-1]
            X = sm.add_constant(x)
        except:
            xx.append(['nan'])
        return y, X, xx, xxx

def regression(n, y, X, xx, xxx):
                try:
                    model = sm.OLS(y[n:(90+n)], X[n:(90+n)])
                    results = model.fit()
                    r2 = results.rsquared
                    xxx.append(r2)
                except:
                    xxx.append(['nan'])
                return y, X, xx, xxx

def stdev(xx, xxx):
                try:
                    xxx1 = pd.DataFrame(xxx)
                    std = xxx1.std()
                    stdv = std.tolist()
                    xx.append(stdv)
                except:
                    xxx.append(['nan'])
                return xx, xxx

# set the initial value for the variables you will use later on
xx = []
xxx = []
X = []
y = []

for stock in stock_list:
    y, X, xx, xxx = stockprice(stock, y, X, xx, xxx)

for n in range(0,90):
    y, X, xx, xxx = regression(n, y, X, xx, xxx)

xx, xxx = stdev(xx, xxx)

我不确定你的代码应该做什么,或者你的变量是什么,但我认为你可以这样做(你需要调整,但我只是想让你了解使用的原则):


请让我知道它是否解决了您的问题

从函数1返回df,并将其作为函数2的参数?抱歉,Python新手。不确定这意味着什么。您能用一个示例演示一下吗?基本上,您没有按预期的方式使用函数。您的函数应该(通常)以
return
值结束,这样您就可以在函数之外访问它。当前,当函数完成时,所有内容都被丢弃。同样,您也不会向函数传递参数。其思想是函数只做标准的事情,而只做一系列输入,而不仅仅是一组特定的数据。最好阅读一些关于函数的教程,而不是我们给出答案-你需要这些知识来做任何有用的事情。此外,这些概念并不局限于Python,而是大多数编程语言。在阅读了一些教程之后,我遇到了一些与我想做的事情相关的问题。是否有一个具体的例子,你可以指出哪些是让学习变得更容易吗?谢谢[peet peeve]Python没有变量声明的概念。变量在分配给时就开始存在。[/peet peeve]是的……你说得对。我的意思是“为变量设置初始值”…我只是选择了错误的单词。谢谢你的评论!我会相应地更新我的答案。很好。很好。谢谢你caspillaga-更清楚!我已经更新了上面的代码。在计算如何在上一个函数(stdev())中同时使用for stock in stock_list和for n in range时遇到困难.现在,我只得到最后一只股票的价值,它被附加到我的最终清单(xx)中。
def function1(stock, kf, xx, X): # provide all varibles you will use as parameters
    try:
        ## your code here, using stock, kf, xx and/or X
    except:
        ## your code here, using stock, kf, xx and/or X
    return kf, xx, X # return all variables you will need on next steps, except 'stock' because it will be managed by the for-loop

def function2(n, y, X, xxx, xx): # provide all varibles you will use as parameters
    try:
        ## your code here, using n, y, X, xxx and/or  xx
    except:
        ## your code here, using n, y, X, xxx and/or  xx
    return y, X, xxx, xx # return all variables you will need on next steps, except 'n' because it will be managed by the for-loop


# set the initial value for the variables you will use later on
kf = ***whatever***
xx = ***whatever***
xxx = ***whatever***
X = ***whatever***
Y = ***whatever***


for stock in stock_list:
    kf, xx, X = function1(stock, kf, xx, X)

for n in range(0,90):
    y, X, xxx, xx = function2(n, y, X, xxx, xx)