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!