前提・実現したいこと
Anaconda環境を使い、Pandasで株探のサイトから決算データを取得して、データフレームの情報を整形する作業をしています。決算期の列から年月の数字だけを抽出した所、SettingWithCopyWarningという警告が出たので、これを解消したいです。
Python
1#SettingWithCopyWarningの警告が出るプログラム 2 3import pandas as pd 4 5url = "https://kabutan.jp/stock/finance?code=7203" 6df_list = pd.read_html(url) #html内にあるテーブルをデータフレームとして取得 7df_PL = df_list[3].dropna() 8#print(df_PL.dtypes) 9 10df_PL["決算期"] = df_PL["決算期"].str[-7:] #①年月だけ抽出 11print(df_PL)
警告文は、
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
試したこと
警告文にあるリンク先の情報などを基に、①の行をdf_PL.loc[:,"決算期"] = df_PL.loc[:,"決算期"].str[-7:]とか、df_PL["決算期"] = df_PL["決算期"].copy().str[-7:]などと書いてみましたが、警告文は消えませんでした。
<参考リンク>
Returning a view versus a copy - pandas
pandas の SettingWithCopyWarning で苦労した話
そこで、より単純なデータフレームを作って同じ処理をした所、こちらではSettingWithCopyWarningの警告は出ませんでした。株探のサイトからクローリングしたデータに何か問題があるのかと思いましたが、原因はよく分からないままです。
Python
1#警告が出ないプログラム 2 3df_PL2 = pd.DataFrame() 4df_PL2['決算期'] = [ 5 "U 2016.03", 6 "U 2017.03", 7 "U 2018.03", 8] 9#print(df_PL2.dtypes) 10 11df_PL2["決算期"] = df_PL2["決算期"].str[-7:] #年月だけ抽出 12print(df_PL2)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/14 14:26