python - 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)
解决方案
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
推荐阅读
- python - 'int' 没有属性 'conn' minecraft api
- git - 通过创建新分支推送到现有存储库本地更改
- android - 带有两个选项卡的 TabLayout 一个 75% 其他 25%
- python - 函数不返回列表
- java - 按下后退按钮或按下其他音频按钮时如何停止 mediaPlayer?
- python - 如何修复“在处理上述异常期间,发生另一个异常:”Python 中的错误?
- javascript - 除非我省略三个链接的静态文件之一,否则 HTML 页面加载缓慢
- laravel - 在 Laravel Eloquent 中,如何检查一个“有”中是否存在多个关系?
- google-cloud-storage - 对 Cloud Storage 使用不同的内容编码
- cucumber - 我可以在黄瓜中使用背景和示例吗?