ホームページ  >  記事  >  バックエンド開発  >  .loc インデックスを作成すると、SettingWithCopyWarning が持続するのはなぜですか?

.loc インデックスを作成すると、SettingWithCopyWarning が持続するのはなぜですか?

DDD
DDDオリジナル
2024-10-28 08:03:02784ブラウズ

Why Does the SettingWithCopyWarning Persist with .loc Indexing?

SettingWithCopyWarning Persists with .loc Indexing

データ操作に .loc[row_indexer,col_indexer] = value を使用すると、依然としてコピー警告付きの設定。これは通常、変更を適用する前に基になるデータフレームをコピーすることによって発生します。

段階的なエラーの再現

次のデータフレーム df を考えてみましょう:

<code class="python">import pandas as pd

d = {'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]}
df = pd.DataFrame(data=d)</code>

最初は、.loc を使用して列を変更しても警告はトリガーされません。

<code class="python">df['new_column'] = None
df.loc[0, 'new_column'] = 100</code>

ただし、df がフィルターされて新しいデータフレーム new_df が作成されている場合、その後 .loc を使用して変更すると警告が表示される可能性があります。

<code class="python">new_df = df.loc[df.col1 > 2]
new_df.loc[2, 'new_column'] = 100</code>

これは、new_df が df のビューまたはスライスであり、new_df に適用された変更が df に反映されないために発生します。

解決策

警告を排除するには、フィルターを適用する前に df のコピーを作成する必要があります:

<code class="python">new_df_copy = df.loc[df.col1 > 2].copy()
new_df_copy.loc[2, 'new_column'] = 100</code>

.copy() を使用すると、df から独立した新しいデータフレームが作成され、変更が可能になります。

convert_objects の回避

SettingWithCopyWarning は、convert_objects 関数によってトリガーすることもできます。これを回避するには、convert_objects:

<code class="python">value1['Total Population'] = value1['Total Population'].astype(str).convert_objects(convert_numeric=True)</code>
を呼び出す前に .astype(str) を使用します。

以上が.loc インデックスを作成すると、SettingWithCopyWarning が持続するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。