Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa `SettingWithCopyWarning` Berlaku Apabila Mengubah Suai DataFrames yang Diperoleh daripada Subset?

Mengapa `SettingWithCopyWarning` Berlaku Apabila Mengubah Suai DataFrames yang Diperoleh daripada Subset?

Susan Sarandon
Susan Sarandonasal
2024-10-29 12:12:02658semak imbas

Why Does `SettingWithCopyWarning` Occur When Modifying DataFrames Derived from Subsets?

Mencari Penyebab SettingWithCopyWarning

Apabila cuba mengubah suai DataFrame menggunakan .loc[row_indexer, col_indexer] = nilai, nilai "Setting"WithCopyWarning berterusan. Isu ini berpunca daripada mengakses kepingan DataFrame daripada DataFrame lain tanpa menggunakan kaedah .copy().

Penghasilan Semula Ralat Langkah demi Langkah

Pertimbangkan kod berikut:

import pandas as pd

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

df['new_column'] = None
df.loc[0, 'new_column'] = 100

Pada mulanya, tiada amaran. Walau bagaimanapun, mencipta DataFrame baharu berdasarkan subset df:

new_df = df.loc[df.col1 > 2]

dan kemudian cuba mengubah suai DataFrame baharu menggunakan .loc:

new_df.loc[2, 'new_column'] = 100

mencetuskan amaran.

Penyelesaian: Menggunakan .copy() untuk Bingkai Data Diperoleh daripada Subset

Untuk menyelesaikan isu ini, sentiasa gunakan kaedah .copy() semasa membuat DataFrame baharu berdasarkan subset bagi DataFrame sedia ada.

new_df_copy = df.loc[df.col1 > 2].copy()
new_df_copy.loc[2, 'new_column'] = 100

Dengan menggunakan .copy(), anda mencipta salinan bebas subset, mengelakkan amaran semasa mengubah suai nilai.

Atas ialah kandungan terperinci Mengapa `SettingWithCopyWarning` Berlaku Apabila Mengubah Suai DataFrames yang Diperoleh daripada Subset?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn