Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Saya Masih Mendapat SettingWithCopyWarning Walaupun Semasa Menggunakan .loc[row_indexer,col_indexer] = value?
SettingWithCopyWarning Walaupun Menggunakan .loc[row_indexer,col_indexer] = nilai
Apabila menggunakan .loc[row_indexer,col_indexer] = nilai untuk menetapkan nilai kepada kepingan DataFrame, adalah mungkin untuk menemui SettingWithCopyWarning. Amaran ini timbul apabila paparan kepingan DataFrame sedang diubah suai, yang berpotensi membawa kepada kekeliruan mengenai sama ada perubahan dibuat pada asal atau salinan.
Untuk menyelesaikan amaran ini dan memastikan bahawa perubahan digunakan terus pada DataFrame asal, adalah penting untuk menggunakan .copy() apabila mencipta DataFrame baharu berdasarkan subset asal. Ini memastikan bahawa DataFrame baharu ialah salinan sebenar dan bukan paparan kepingan.
Sebagai contoh, pertimbangkan kod berikut:
import pandas as pd df = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]}) new_df = df[df['col1'] > 2] # Create a new DataFrame with a filter new_df['new_column'] = None # Create a new column in the new DataFrame new_df.loc[2, 'new_column'] = 100 # Assign a value using .loc
Tanpa menggunakan .copy(), kod ini akan terhasil dalam SettingWithCopyWarning kerana new_df ialah paparan kepingan df. Untuk membetulkannya:
import pandas as pd df = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]}) new_df = df[df['col1'] > 2].copy() # Use .copy() to create a true copy new_df['new_column'] = None new_df.loc[2, 'new_column'] = 100
Dengan menggunakan .copy(), anda boleh mengelakkan amaran dan memastikan bahawa perubahan yang dibuat pada DataFrame baharu ditunjukkan secara langsung dalam DataFrame asal.
Begitu juga , menggunakan .astype() atau .convert_objects() pada salinan kepingan DataFrame menggunakan .loc juga boleh mencetuskan amaran. Untuk menyelesaikannya, gunakan fungsi terlebih dahulu atau cipta salinan sebenar sebelum membuat perubahan.
Atas ialah kandungan terperinci Mengapa Saya Masih Mendapat SettingWithCopyWarning Walaupun Semasa Menggunakan .loc[row_indexer,col_indexer] = value?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!