首页 > 解决方案 > python代码在函数外工作,但不在函数内工作

问题描述

下面的代码工作得很好。它从两个变量的列表中创建一个数据框并进行一些计算。

d = {'VGK':[1], 'VPL':[1]}
parser = lambda timestamp: pd.datetime.strptime(timestamp, '%Y-%m-%d')
etf_tickers = pd.DataFrame(data=d)
etfs = pd.DataFrame([])

for count,ticker in enumerate(etf_tickers):
    x = pd.read_csv('{}.csv'.format(ticker), parse_dates=[0], index_col='timestamp',date_parser=parser)
    x['{}_logdiff'.format(ticker)] = log(x[ticker]) - log(x[ticker].shift(1))  
    if etfs.empty:
        etfs = x
    else:
        etfs= etfs.join(x, how='outer')

但是,当我按如下方式在函数内部移动时,它不起作用。我没有收到错误,它只是不生成数据框。

d = {'VGK':[1], 'VPL':[1]}
parser = lambda timestamp: pd.datetime.strptime(timestamp, '%Y-%m-%d')

def create_frame_logdiffs(inlist,outframe):
    outtickers = pd.DataFrame(data=inlist)
    outframe = pd.DataFrame([])
    for count,ticker in enumerate(outtickers):
        x = pd.read_csv('{}.csv'.format(ticker), parse_dates=[0], index_col='timestamp',date_parser=parser)
        x['{}_logdiff'.format(ticker)] = log(x[ticker]) - log(x[ticker].shift(1)) #we use the natural log diff to compute retuns defined as the percentage change in price
        if outframe.empty:
            outframe = x
        else:
            outframe= outframe.join(x, how='outer')

create_frame_logdiffs(d,etfs)

标签: python

解决方案


DataFrame 的范围在生成它的函数内是本地的。除非您将 DataFrame 从您的函数返回到您进行调用的地方,否则您将看不到任何东西。调用函数后,您需要添加一条return语句并将输出保存在某个变量中。就像是

def create_frame_logdiffs(inlist,outframe):
    outtickers = pd.DataFrame(data=inlist)
    outframe = pd.DataFrame([])
    for count,ticker in enumerate(outtickers):
        x = pd.read_csv('{}.csv'.format(ticker), parse_dates=[0], index_col='timestamp',date_parser=parser)
        x['{}_logdiff'.format(ticker)] = log(x[ticker]) - log(x[ticker].shift(1)) #we use the natural log diff to compute retuns defined as the percentage change in price
        if outframe.empty:
            outframe = x
        else:
            outframe= outframe.join(x, how='outer')
    return outframe

outframe = create_frame_logdiffs(d,etfs)
# Do something with the outframe

推荐阅读