Saya memiliki ini DataFrame
dan hanya ingin catatan yang EPS
kolomnya bukan NaN
:
>>> df
STK_ID EPS cash
STK_ID RPT_Date
601166 20111231 601166 NaN NaN
600036 20111231 600036 NaN 12
600016 20111231 600016 4.3 NaN
601009 20111231 601009 NaN NaN
601939 20111231 601939 2.5 NaN
000001 20111231 000001 NaN NaN
... Yaitu sesuatu yang ingin df.drop(....)
mendapatkan kerangka data yang dihasilkan ini:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
Bagaimana aku melakukan itu?
df.dropna(subset = ['column1_name', 'column2_name', 'column3_name'])
Jawaban:
Jangan jatuhkan, ambil saja baris di mana EPS bukan NA:
sumber
pandas.notnull
daripadanp.isfinite
EPS
dalam contoh) berisi string atau tipe lain yang tidak dapat dicerna olehnp.isfinite()
. Saya sarankan untuk menggunakanpandas.notnull()
yang akan menangani ini dengan lebih murah hati.Pertanyaan ini sudah diselesaikan, tetapi ...
... juga pertimbangkan solusi yang disarankan oleh Wouter dalam komentar aslinya . Kemampuan untuk menangani data yang hilang, termasuk
dropna()
, dibangun ke dalam panda secara eksplisit. Selain berpotensi meningkatkan kinerja daripada melakukannya secara manual, fungsi-fungsi ini juga dilengkapi dengan berbagai opsi yang mungkin berguna.Ada juga opsi lain (Lihat dokumen di http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html ), termasuk menjatuhkan kolom alih-alih baris.
Cukup berguna!
sumber
df.dropna(subset = ['column_name'])
. Harapan yang menyelamatkan setidaknya satu orang ekstra 5 detik dari 'apa yang saya lakukan salah'. Jawaban yang bagus, +1df.dropna(subset = ['column_name'])
persis apa yang saya cari! Terima kasih!Saya tahu ini sudah dijawab, tetapi hanya demi solusi panda murni untuk pertanyaan khusus ini yang bertentangan dengan deskripsi umum dari Aman (yang luar biasa) dan jika ada orang lain yang mengalami hal ini:
sumber
df.dropna(subset=['EPS'])
(berdasarkan pada deskripsi umum Aman, tentu saja ini juga berfungsi)notnull
juga apa yang Wes (penulis Pandas) sarankan dalam komentarnya pada jawaban lain.df[pd.notnull(df[df.columns[INDEX]])]
manaINDEX
kolom bernomor jika Anda tidak tahu namaAnda bisa menggunakan ini:
sumber
how='all'
redundan di sini, karena Anda menset dataframe hanya dengan satu bidang sehingga keduanya'all'
dan'any'
akan memiliki efek yang sama.Sederhana dari semua solusi:
sumber
Anda bisa menggunakan metode dataframe notnull atau kebalikan dari isnull , atau numpy.isnan :
sumber
Cara sederhana dan mudah
df.dropna(subset=['EPS'],inplace=True)
sumber: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html
sumber
inplace=True
adalah topik yang aneh, dan tidak berpengaruhDataFrame.dropna()
. Lihat: github.com/pandas-dev/pandas/issues/16529solusi lain yang menggunakan fakta bahwa
np.nan != np.nan
:sumber
Versi lain:
sumber
Series.notna()
?Dalam kumpulan data yang memiliki jumlah kolom yang besar, lebih baik untuk melihat berapa banyak kolom yang mengandung nilai nol dan berapa banyak yang tidak.
Sebagai contoh dalam dataframe saya itu berisi 82 kolom, dimana 19 berisi setidaknya satu nilai nol.
Lebih lanjut Anda juga dapat secara otomatis menghapus cols dan rows bergantung pada yang memiliki lebih banyak nilai null
Berikut adalah kode yang melakukan ini dengan cerdas:
Catatan: Kode di atas menghapus semua nilai nol Anda. Jika Anda ingin nilai nol, proses sebelumnya.
sumber
Dapat ditambahkan pada saat itu '&' dapat digunakan untuk menambahkan kondisi tambahan misalnya
Perhatikan bahwa ketika mengevaluasi pernyataan, panda membutuhkan tanda kurung.
sumber
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
. Anda perlu menambahkan tanda kurung -df = df[(df.EPS > 2.0) & (df.EPS <4.0)]
, tetapi juga bukan jawaban untuk pertanyaan ini.Untuk beberapa alasan tidak ada jawaban yang dikirimkan sebelumnya bekerja untuk saya. Solusi dasar ini:
Padahal tentu saja itu akan menjatuhkan baris dengan angka negatif juga. Jadi, jika Anda menginginkannya, mungkin pintar untuk menambahkan ini juga.
sumber
Salah satu solusinya bisa
Cara lain bisa jadi
Saya harap ini bermanfaat.
sumber