2017-10-10 5 views
2

목표 : 함수에 N int 목록을 전달하고 해당 int를 1로 사용합니다. 팬더 데이터 프레임에 N 개의 열을 만들고 이름을 지정하십시오. 2). 되돌아 오는 기간으로 이러한 int를 사용하여 롤링 평균을 계산하십시오.for 루프의 팬더 시리즈 생성 및 명명

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: Wrong number of items passed 2, placement implies 1

내가 여기 논리에 문제가 있습니까 여기

은 (재현성에 대한 데이터 풀과) 함수에 대한 코드? for 루프는 int를 순차적으로 전달하지 않아야하므로, 한 번에 둘 이상의 값을 전달하는 방식을 이해하지 못합니다. 결과적으로 문제를 해결하는 방법을 모르겠습니다.

이 게시물에 따르면, 하나의 값만 취할 수있는 컨테이너에 여러 값을 동시에 전달할 때이 오류가 발생합니다. for 루프 주소를 써야하지 않습니까? ValueError: Wrong number of items passed - Meaning and suggestions?

답변

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]): 

    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 
에 함수에서 반환