2017-10-13 1 views
0

에 새로운 Dataframe 컬럼에 저장 :파이썬 : 다른 인덱스가있는 요소를 선택하고 나는이처럼 보이는 DataFrame이 팬더

enter image description here

내가 원하는 것은에 설명 된 다음과 같은 동작을 계산하는 것입니다 루프 :

for ii in range(0,len(df['Avg'])): 
    if ii==0: 
     df['Return'][ii]=0 
    else: 
     df['Return'][ii] = (df['Avg'][ii])/(df['Avg'][ii-1])-1 

나는 그 작업을하기 위해 '평균'열에서 '존재'와 '이전'요소를 사용하려면,하지만 난이 오류 받고 있어요 :

을 0

A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy df['Return'][ii]=0 C:/Users/julio/Desktop/Python Scripts/Euclid Capital Scripts/DukasCopy/duka_test:34: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy df['Return'][ii] = (df['Avg'][ii])/(df['Avg'][ii-1])-1

내가 원하는 것을 얻고 그 값을 'Return'열에 저장할 다른 방법이 있습니까? , 거기에

df.loc[:, 'Return'] = df['Avg'].pct_change().fillna(0.) 

당신이보고있는 경고에 관해서는 : 앞에 0 대신의 NaN의 체인 .fillna로 시작하는,

df.loc[:, 'Return'] = df['Avg'].pct_change() 

을 또는 :

답변

1

당신은 .pct_change 사용할 수 있습니다 이미 여기에 무슨 일이 벌어지고 있는지에 대한 많은 정보가 있습니다.

  • 를 사용하여 경우

  • Returning a view versus a copy
  • Understanding SettingwithCopyWarning in pandas
  • 이 리드 것입니다. .loc 또는 .iloc을 사용하는 것이 더 안전한 체인 된 색인 생성을 사용하고 있습니다.

    예 :

    df = pd.DataFrame({'Avg' : np.random.rand(10) + 1}, 
            index=pd.date_range('2017-02', periods=10)) 
    df.loc[:, 'Return'] = df['Avg'].pct_change().fillna(0.) 
    print(df) 
           Avg Return 
    2017-02-01 1.86389 0.00000 
    2017-02-02 1.19992 -0.35623 
    2017-02-03 1.08414 -0.09649 
    2017-02-04 1.17281 0.08179 
    2017-02-05 1.30422 0.11204 
    2017-02-06 1.59484 0.22284 
    2017-02-07 1.63399 0.02455 
    2017-02-08 1.99155 0.21883 
    2017-02-09 1.54733 -0.22305 
    2017-02-10 1.50584 -0.02682 
    
    관련 문제