目标:将N个int的列表传递给函数,并将这些int用于1)。在pandas数据框中创建并命名N列; 2)。使用这些整数作为回顾期来计算滚动平均值。
这是函数的代码(带有重复数据拉取):
import pandas as pd
import pandas_datareader as web
test_df = web.DataReader('GDP', data_source = 'fred')
def sma(df, sma_lookbacks = [1,2]):
import pandas as pd
df = pd.DataFrame(df)
df = df.dropna()
for lookback in sma_lookbacks:
df[str('SMA' + str(lookback))] = df.rolling(window = lookback).mean()
return df.tail()
sma(test_df)
收到错误:
ValueError:传递的项目数量错误2,展示位置意味着1
我这里有逻辑问题吗?我相信for循环它应该不是一次顺序传递int,所以我不太明白它是如何一次传递多个值的。因此,我不确定如何进行问题排查。
根据这篇文章,当您同时将多个值传递给只能获取一个值的容器时,会抛出此错误。不应该是for循环地址吗? ValueError: Wrong number of items passed - Meaning and suggestions?
答案 0 :(得分:2)
我认为在分配应用于数据帧的函数返回的值之前,pandas会搜索列名。因此,在将函数返回到该列的系列分配之前,在开头用一些标量初始化该列,即
import pandas as pd
import pandas_datareader as web
test_df = web.DataReader('GDP', data_source = 'fred')
def sma(df, sma_lookbacks = [1,2]):
df = pd.DataFrame(df)
df = df.dropna()
for lookback in sma_lookbacks:
df[str('SMA' + str(lookback))] = 0
df[str('SMA' + str(lookback))] = df.rolling(window = lookback).mean()
return df.tail()
GDP SMA1 SMA2 DATE 2016-04-01 18538.0 18538.0 18431.60 2016-07-01 18729.1 18729.1 18633.55 2016-10-01 18905.5 18905.5 18817.30 2017-01-01 19057.7 19057.7 18981.60 2017-04-01 19250.0 19250.0 19153.85