Saya dapat menggunakan pandas
dropna()
fungsionalitas untuk menghapus baris dengan beberapa atau semua kolom ditetapkan sebagai NA
's. Apakah ada fungsi yang setara untuk menjatuhkan baris dengan semua kolom bernilai 0?
P kt b tt mky depth
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 1.1 3 4.5 2.3 9.0
Dalam contoh ini, kami ingin melepaskan 4 baris pertama dari bingkai data.
Terima kasih!
Jawaban:
Ternyata ini dapat diekspresikan dengan baik dalam mode vektor:
sumber
df = df[(df.T != 0).any()]
rows with all columns having value 0
, tapi orang bisa menyimpulkanall
metode.Satu baris. Tidak diperlukan transpos:
Dan bagi mereka yang menyukai simetri, ini juga berfungsi ...
sumber
df.loc[(df != 0).any(1)]
. Kerja tim!axis=1
karena eksplisit; lebih pythonic menurut sayadf
df = df.loc[(df!=0).all(axis=1)]
dandf = df.loc[(df!=0).any(axis=1)]
untuk menjatuhkan baris dengan nol seperti yang sebenarnya setara dengan dropna ().Saya mencari pertanyaan ini sebulan sekali dan selalu harus menggali jawaban terbaik dari komentar:
Terima kasih Dan Allan!
sumber
Ganti nol dengan
nan
dan kemudian jatuhkan baris dengan semua entri sebagainan
. Setelah itu gantinan
dengan angka nol.sumber
Saya pikir solusi ini adalah yang terpendek:
sumber
Beberapa solusi yang menurut saya berguna saat mencari ini, terutama untuk kumpulan data yang lebih besar:
Melanjutkan contoh dari @ U2EF1:
Pada kumpulan data yang lebih besar:
sumber
df[~(df.values.prod(axis=1) == 0) | ~(df.values.sum(axis=1)==0)]
bdf[np.square(bdf.values).sum(axis=1) != 0]
Hasil:
sumber
ValueError: labels [True ... ] not contained in matrix
df = df.drop(temp)
digunakandf = df.drop(df[temp].index)
Anda dapat menggunakan
lambda
fungsi cepat untuk memeriksa apakah semua nilai dalam baris tertentu adalah0
. Kemudian Anda bisa menggunakan hasil penerapan itulambda
sebagai cara untuk memilih hanya baris yang cocok atau tidak cocok dengan kondisi itu:Hasil:
sumber
Alternatif lain:
sumber
Bagi saya kode ini:
df.loc[(df!=0).any(axis=0)]
tidak berhasil. Ini mengembalikan set data yang tepat.Sebagai gantinya, saya menggunakan
df.loc[:, (df!=0).any(axis=0)]
dan menjatuhkan semua kolom dengan nilai 0 dalam datasetFungsi
.all()
menjatuhkan semua kolom yang mana ada nilai nol dalam dataset saya.sumber
Coba perintah ini bekerja dengan sempurna.
sumber
Untuk menghapus semua kolom dengan nilai 0 di baris mana pun:
sumber