問題タブ [chained-assignment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
30722 参照

python - 混乱再:データフレーム警告のスライスのパンダコピー

この問題に関連する多くの質問と回答を調べましたが、予期しない場所でこのスライス警告のコピーが表示されていることがわかりました。また、以前は正常に実行されていたコードで発生しているため、何らかの更新が原因である可能性があるのではないかと考えています.

たとえば、これは、Excel ファイルを pandas に読み込み、構文 DataFrameに含まれる列のセットを削減するだけの一連のコードです。df[[]]

ここで、このファイルにさらに変更を加えるとizmir_lim、スライス警告のコピーが発生します。

/Users/samliienfeld/anaconda/lib/python3.5/site-packages/ipykernel/ main .py:2: SettingWithCopyWarning: DataFrame からスライスのコピーに値を設定しようとしています。代わりに .loc[row_indexer,col_indexer] = value を使用してみてください

df[[]]列のサブセット化がデフォルトでコピーを返すと思っていたので、私は混乱しています。エラーを抑制するために私が見つけた唯一の方法は、明示的に追加することdf[[]].copy()です。以前はそうする必要はなく、スライス エラーのコピーを発生させなかったと断言することもできました。

同様に、データフレームで関数を実行して特定の方法でフィルタリングする他のコードがあります。

この時点から、 の値のいずれかに変更を加えるとdf_lim、スライス エラーのコピーが発生します。私が見つけた唯一の方法は、関数呼び出しを次のように変更することです。

これは私には間違っているようです。私は何が欠けていますか?これらのユース ケースでは、デフォルトでコピーが返されるように思われます。これらのスクリプトを最後に実行したときには、これらのエラーは発生していなかったと断言できます。
あちこちに追加を開始する必要があり.copy()ますか? これを行うためのよりクリーンな方法があるはずです。洞察や助けをいただければ幸いです。

0 投票する
1 に答える
611 参照

python - SettingWithCopyWarning がない場合の予測不可能な pandas スライス割り当て動作

スライスに割り当てるときの pandas の動作は本質的に予測不可能であることはよく知られています(そして理解できます)。しかし、私は警告によってそれについて警告されることに慣れていSettingWithCopyます。

次の 2 つのコード スニペットのいずれでも警告が生成されないのはなぜですか?また、そのようなコードを意図せずに作成する可能性を減らすには、どのような手法を使用すればよいでしょうか?

説明は、現在のコンテキストから親 DataFrame にまだ到達できる場合にのみ、パンダが警告を生成するというものだと思いました。(前の例が示すように、これは検出アルゴリズムの弱点です。)

次のスニペットでは、元の 2 列の DataFrame に到達できなくなっていることがわかりますが、pandas の警告メカニズムは (幸いなことに) トリガーされます。

編集:

これを調査しているときに、警告が欠落している別のケースを見つけました。

ほぼ同じ例でも警告がトリガーされます。

更新: コメントに入れるのが難しいため、ここで @firelynx の回答に返信します。

回答で、@firelynx は、データフレーム全体を取得しているため、最初のコード スニペットでは警告が発生しないと述べています。しかし、参加したとしても、警告は表示されません。

0 投票する
1 に答える
185 参照

python - データフレーム ビューまたはコピーの利点は何ですか

SettingWithCopy悪名高い警告について多くの質問を見てきました。私はそれらのいくつかにあえて答えることさえしました。最近、このトピックに関する回答をまとめていて、データフレーム ビューの利点を提示したいと考えていました。なぜデータフレームビューを作成するのが良い考えなのか、またはそれが生成するものは何であれ、具体的なデモンストレーションを作成できませんでしたSettingWithCopy

検討df

そして、dfvこれはのコピーですdf




私は生成することができますSettingWithCopy

ここに画像の説明を入力


ただし、dfv変わった

dfしていない


そしてdfvまだコピーです


私が変わればdf


しかしdfv、変わっていません。しかし、私はdfから参照することができますdfv


質問

dfv独自のデータを保持し (つまり、実際にはメモリを節約しない)、警告にもかかわらず代入操作を介して値を代入する場合、なぜ最初から参照を保存して生成SettingWithCopyWarningする必要があるのでしょうか?

具体的なメリットは何ですか?

0 投票する
4 に答える
6632 参照

python - なぜやみくもに df.copy() を使用して SettingWithCopyWarning を修正するのが悪い考えなのか

恐ろしいものについての無数の質問がありますSettingWithCopyWarning

それがどのように起こるかについて、私はよく理解しています。(私が良いと言ったことに注意してください、素晴らしいではありません)

dfに格納されている属性を介して、データフレームが別のデータフレームに「アタッチ」されている場合に発生しis_copyます。

これが例です

その属性をNoneまたはに設定できます

@Jeff のような開発者を見たことがありますが、他に誰がいるか思い出せません。SettingWithCopyWarning目的があることを引用します。

質問では、オリジナルにバックを
割り当てることによって警告を無視することがなぜ悪い考えであるかを示す具体的な例は何ですか?copy

明確にするために、 「悪い考え」を定義します。

悪い考えコードが壊れているので修正が必要だという電話が土曜の夜中にかかるようなコードを本番環境に置く
のは悪い考えです。

df = df.copy()リードを迂回SettingWithCopyWarningしてその種の電話を受けるにはどうすればよいでしょうか。これは混乱の原因であり、明確にしようとしているため、詳しく説明したいと思います。爆破するエッジケースが見たい!