実現したいこと
DataFrameの中の1列を取り出して、その移動平均を計算し、新たな列として加えたい。
発生している問題・分からないこと
SettingWithCopyWarningが発生します。(計算結果はあっているもよう)
エラーメッセージ
error
1<ipython-input-1-44eea35d0d69>:12: SettingWithCopyWarning: 2A value is trying to be set on a copy of a slice from a DataFrame. 3Try using .loc[row_indexer,col_indexer] = value instead 4 5See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy 6 df1['SMA1'] = df1['b'].rolling(2).mean() 7
該当のソースコード
import pandas as pd df = pd.DataFrame({'a': [0, 1, 2], 'b': [3, 4, 5], 'c':[6,7,8]}, index=['x', 'y', 'z']) print(df) print() df1 = df.iloc[:, [1]] print(df1) print() # rollingで移動平均を作る df1['SMA1'] = df1['b'].rolling(2).mean() print(df1)
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
DataFrameから1列抽出するのではなく、最初から1列だけの場合には、警告は出ません。
import pandas as pd
df2 = pd.DataFrame({'b': [3, 4, 5]}, index=['x', 'y', 'z'])
print(df2)
print()
rollingで移動平均線を作る
df2['SMA1'] = df2['b'].rolling(2).mean()
print(df2)
結果は以下の通り。
b
x 3
y 4
z 5
b SMA1
x 3 NaN
y 4 3.5
z 5 4.5
補足
できうるならば、最初のような形で、DataFrameから列を抽出して作業をしたいのですが、どのようにすればいいのか、教えていただけませんでしょうか。
よろしくお願いいたします。
