前提・実現したいこと
Pythonの下記コードで "SettingWithCopyWarning"の警告が取り除きたいです。
下記リンクを参照してわかったこととしては、代入や参照が曖昧なためにでる警告のようですが、具体的にどう取り除けばよいかが分かりませんでした。copy()を使ったりしたのですが、どうもうまく取り除けませんでした。
初心者なので申し訳ありませんが、どう書くかを教えてもらえると、大変ありがたいです。
https://linus-mk.hatenablog.com/entry/2019/02/02/200000
発生している問題・エラーメッセージ
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy self._setitem_with_indexer(indexer, value)
該当のソースコード
Python3
1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4%matplotlib inline 5 6cs_master = pd.read_csv("customer_master.csv") 7class_master = pd.read_csv("class_master.csv") 8 9cs_master.head() 10class_master.head() 11 12#文字列から日付へ変換 13cs_master["start_date"] = pd.to_datetime(cs_master["start_date"]) 14cs_master["end_date"] = pd.to_datetime(cs_master["end_date"]) 15cs_master["start_ym"] = cs_master["start_date"].dt.strftime("%Y%m") 16cs_master["end_ym"] = cs_master["end_date"].dt.strftime("%Y%m") 17 18#結合 19cs_join = pd.merge(cs_master, class_master, on="class", how="left") 20cs_join.head() 21 22#期間を出す 23from dateutil.relativedelta import relativedelta 24cs_join["calc_date"] = cs_join["end_date"] 25cs_join["calc_date"] = cs_join["calc_date"].fillna(pd.to_datetime("20190430")) 26cs_join["member_period"]= 0 27for i in range(len(cs_join)): 28 delta = relativedelta(cs_join["calc_date"].iloc[i],cs_join["start_date"].iloc[i]) 29 cs_join["member_period"].iloc[i] = delta.years*12 + delta.months 30cs_join[["start_date", "end_date", "calc_date", "member_period"]].head() 31
cs_join.head()
1 customer_id name class gender start_date end_date campaign_id is_deleted start_ym end_ym class_name price 20 OA832399 XXXX C01 F 2015-05-01 NaT CA1 0 201505 NaN オールタイム 10500 31 PL270116 XXXXX C01 M 2015-05-01 NaT CA1 0 201505 NaN オールタイム 10500 42 OA974876 XXXXX C01 M 2015-05-01 NaT CA1 0 201505 NaN オールタイム 10500 53 HD024127 XXXXX C01 F 2015-05-01 NaT CA1 0 201505 NaN オールタイム 10500 64 HD661448 XXXXX C03 F 2015-05-01 NaT CA1 0 201505 NaN ナイト 6000
cs_join[["start_date",
1 start_date end_date calc_date member_period 20 2015-05-01 NaT 2019-04-30 47 31 2015-05-01 NaT 2019-04-30 47 42 2015-05-01 NaT 2019-04-30 47 53 2015-05-01 NaT 2019-04-30 47 64 2015-05-01 NaT 2019-04-30 47
回答1件
あなたの回答
tips
プレビュー