• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SettingWithCopyWarning:)

SettingWithCopyWarningの解消方法とは?

このQ&Aのポイント
  • pandasでSettingWithCopyWarningが発生する場合、.locを使用して明示的なコピーを作成することで解消できます。
  • コードにおいて、df.loc[0, 'youbi'] = datetime.datetime.strptime((df['date'][0]), '%Y/%m/%d').weekday() のように、明示的に.locを使用して値を代入しましょう。
  • これにより、SettingWithCopyWarningが出なくなり、正しくデータが代入されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Proof4
  • ベストアンサー率78% (151/192)
回答No.1

df['youbi']が返すものがビューではなくコピーであるために発生するWarningだと思います。下記に示す単純な構造の場合はWarningが発生しませんでした。質問者様のデータ構造を示していただけると具体的なアドバイスをするのに役立ちます。 import pandas as pd import datetime df = pd.DataFrame([ '2021/01/01', '2021/04/01', '2021/05/16', ], columns=['date']) df['youbi'] = None df['youbi'][0] = datetime.datetime.strptime((df['date'][0]), '%Y/%m/%d').weekday() .locを利用してもダメとのことでしたが、どのような記述でダメだったのかお伝えいただけるとさらに助けになります。曜日のカラムに値を設定する場合は df.loc[0, 'youbi'] = datetime.datetime.strptime((df['date'][0]), '%Y/%m/%d').weekday() が同等の記述になると思いますが、こちらを試すといかがでしょうか?

nsonoda
質問者

補足

早速ありがとうございます! 1)データについて データそのものは既存CSVファイル入手して処理していたものです。この既存CSVの場合、エラーが出るようです。 私もゼロからdfを作成すると何故かエラーがは出ませんでした。 既存CSVから余計な列を全て削除(date列だけ残し、youbi列を追加)すると、不思議とエラーが出ませんでした。(下記のケースBです。) 再度、CSVファイルの不要行の削除増やしながら、 再現状況を確認しました。結果以下の通りです。 <ケースA> 1列目 date (既存CSVにあり) 2列目 time_code(既存CSVにあり) 3列目 youbi (追加) という2列目があるとエラーが出ます。 <ケースB> 1列目 date (既存CSVにあり) 2列目 youbi (追加) というであればエラー出ません。 非常に不思議なのです。 画面キャプチャを貼り付けたかったのですが、Okwaveには機能がないようなので、上記のわかりにくくて説明ですみません。 2).locについて 上記の1)の問題が残っていても、教えいただいたコマンドでうまくいきました。 今更ですが、私の間違った動かないコマンドは以下のと通りです。 [誤り、私の例] df.loc['youbi'][0] = datetime.datetime.strptime((df.loc['date'][0]), '%Y/%m/%d').weekday() [正しい、教えていただいたもの] df.loc[0, 'youbi'] = datetime.datetime.strptime((df['date'][0]), '%Y/%m/%d').weekday() すみません、見比べると私がlocの使い方が悪いようです。 とりあえず、2)の方法で対応できそうです。 本当にありがとうございました。

関連するQ&A