Mulai dari panda 0,20 ix sudah usang . Cara yang benar adalah dengan menggunakan df.loc
di sini adalah contoh kerja
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({"A":[0,1,0], "B":[2,0,5]}, columns=list('AB'))
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
>>>
Penjelasan:
Seperti yang dijelaskan dalam dokumen di sini , pada .loc dasarnya berbasis label, tetapi juga dapat digunakan dengan array boolean .
Jadi, apa yang kami lakukan di atas berlaku df.loc[row_index, column_index]dengan:
- Mengeksploitasi fakta yang
locdapat menggunakan array boolean sebagai topeng yang memberi tahu panda bagian dari baris yang ingin kita ubahrow_index
- Mengeksploitasi fakta
locjuga berdasarkan label untuk memilih kolom menggunakan label 'B'dicolumn_index
Kita dapat menggunakan logika, kondisi atau operasi apa pun yang mengembalikan serangkaian boolean untuk membangun array boolean. Dalam contoh di atas, kami ingin semua rowsyang mengandung a 0, untuk itu kami dapat menggunakan df.A == 0, seperti yang Anda lihat dalam contoh di bawah ini, ini mengembalikan serangkaian boolean.
>>> df = pd.DataFrame({"A":[0,1,0], "B":[2,0,5]}, columns=list('AB'))
>>> df
A B
0 0 2
1 1 0
2 0 5
>>> df.A == 0
0 True
1 False
2 True
Name: A, dtype: bool
>>>
Kemudian, kami menggunakan array boolean di atas untuk memilih dan mengubah baris yang diperlukan:
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
Untuk informasi lebih lanjut, periksa dokumentasi pengindeksan lanjutan di sini .
whereseperti yang terlihat dalam solusi di bawah ini