在本系列的第三篇,我碰到了 SettingWithCopyWarning 這個問題,Google 之後好像滿常見的,似乎跟 pandas 操作時所返回結果是 view 抑或是 copy 有關,這裡面好像又與 chained assignment 牽扯在一起。
對我這個初學者來說,這些太高能了。我只想著要怎麼不讓 Python 回報警告,以下是土法煉鋼的嘗試。那個 copy() 的方法好像在 pandas documentation 裡面有提到應該要避免,但不管它,先讓 Python 閉嘴先。不知道之後會不會有問題呀?
import pandas as pd
import os
os.chdir('D:\\Project\\ATR') #更改工作目錄到ATR資料夾
df = pd.read_csv("SE 日線.csv", usecols = list(range(7)))
df_se = df.tail(23) #用.tail(23)把最後23列挑出來
df_se.index = range(23) #把index改成0到22
df_se.columns=['Date','Open','High','Low','Close','Change','ChangePct']
PreviousClose = df_se.Close.shift(1).copy()
df_se.loc[:,'PreviousClose'] = PreviousClose
TrueRange = df_se[['PreviousClose','High']].max(axis=1).copy()-df_se[['PreviousClose','Low']].min(axis=1).copy() #2
df_se.loc[:,'TrueRange']= TrueRange
PreAvgTR = df_se['TrueRange'].rolling(window=21).mean().shift().copy()
df_se.loc[:,'PreAvgTR'] = PreAvgTR
ATR = (df_se['PreAvgTR'].copy()*(21-1) + df_se['TrueRange'].copy())/21
df_se.loc[:,'ATR'] = ATR
print(df_se[-1:]['ATR'])
接著,下一篇就要把這段接到 API code 的屁股啦!
