Menggantikan Nilai DataFrame Menggunakan Logik Bersyarat
Dalam Panda, manipulasi DataFrame merupakan aspek yang penting. Satu operasi biasa ialah menggantikan nilai berdasarkan keadaan tertentu. Pertimbangkan senario berikut:
Soalan:
Saya mahu menggantikan nilai dalam lajur DataFrame yang melebihi ambang dengan sifar. Saya cuba mencapai ini menggunakan:
df[df.my_channel > 20000].my_channel = 0
Walau bagaimanapun, ia nampaknya berfungsi hanya apabila menyalin saluran ke dalam DataFrame baharu. Mengapakah ia tidak berfungsi dengan DataFrame asal?
Jawapan:
Isu ini berkaitan dengan pengindeks yang digunakan. Sebelum Pandas versi 0.20.0, pengindeks .ix biasanya digunakan. Walau bagaimanapun, ia telah ditamatkan. Sebaliknya, gunakan pengindeks .loc atau .iloc.
Untuk menyelesaikan masalah anda, anda boleh menggunakan kod berikut:
mask = df.my_channel > 20000 column_name = 'my_channel' df.loc[mask, column_name] = 0
Kod ini melakukan tindakan berikut:
Sebagai alternatif, anda boleh menggunakan satu pelapik:
df.loc[df.my_channel > 20000, 'my_channel'] = 0
Perhatikan bahawa dalam kes ini, penggunaan .loc disyorkan untuk .iloc kerana yang terakhir boleh mengakibatkan NotImplementedError.
Atas ialah kandungan terperinci Mengapa Tidak Menggantikan Nilai DataFrame Berdasarkan Keadaan Berfungsi Secara Terus, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!