Saya memiliki DataFrame berikut:
daysago line_race rating rw wrating
line_date
2007-03-31 62 11 56 1.000000 56.000000
2007-03-10 83 11 67 1.000000 67.000000
2007-02-10 111 9 66 1.000000 66.000000
2007-01-13 139 10 83 0.880678 73.096278
2006-12-23 160 10 88 0.793033 69.786942
2006-11-09 204 9 52 0.636655 33.106077
2006-10-22 222 8 66 0.581946 38.408408
2006-09-29 245 9 70 0.518825 36.317752
2006-09-16 258 11 68 0.486226 33.063381
2006-08-30 275 8 72 0.446667 32.160051
2006-02-11 475 5 65 0.164591 10.698423
2006-01-13 504 0 70 0.142409 9.968634
2006-01-02 515 0 64 0.134800 8.627219
2005-12-06 542 0 70 0.117803 8.246238
2005-11-29 549 0 70 0.113758 7.963072
2005-11-22 556 0 -1 0.109852 -0.109852
2005-11-01 577 0 -1 0.098919 -0.098919
2005-10-20 589 0 -1 0.093168 -0.093168
2005-09-27 612 0 -1 0.083063 -0.083063
2005-09-07 632 0 -1 0.075171 -0.075171
2005-06-12 719 0 69 0.048690 3.359623
2005-05-29 733 0 -1 0.045404 -0.045404
2005-05-02 760 0 -1 0.039679 -0.039679
2005-04-02 790 0 -1 0.034160 -0.034160
2005-03-13 810 0 -1 0.030915 -0.030915
2004-11-09 934 0 -1 0.016647 -0.016647
Saya perlu menghapus baris line_race
yang sama dengan 0
. Apa cara paling efisien untuk melakukan ini?
Jawaban:
Jika saya memahami dengan benar, itu harus sesederhana:
sumber
df
besar? Atau, bisakah saya melakukannya di tempat?df
dengan baris 2M dan berjalan cukup cepat.df = df[df['line race'] != 0]
df=df[~df['DATE'].isin(['2015-10-30.1', '2015-11-30.1', '2015-12-31.1'])]
Tetapi untuk setiap bypasser masa depan Anda dapat menyebutkan bahwa
df = df[df.line_race != 0]
tidak melakukan apa-apa ketika mencoba memfilterNone
/ menghilangkan nilai.Apakah berhasil:
Tidak melakukan apa-apa:
Apakah berhasil:
sumber
df = df[df.columns[2].notnull()]
, tetapi dengan satu atau lain cara Anda harus dapat mengindeks kolom entah bagaimana.df = df[df.line_race != 0]
menjatuhkan baris tetapi juga tidak mengatur ulang indeks. Jadi, ketika Anda menambahkan baris lain di df mungkin tidak menambahkan di akhir. Saya akan merekomendasikan pengaturan ulang indeks setelah operasi itu (df = df.reset_index(drop=True)
)==
operator untuk memulai. stackoverflow.com/questions/3257919/…Cara terbaik untuk melakukan ini adalah dengan masking boolean:
UPDATE: Sekarang panda 0.13 sudah keluar, cara lain untuk melakukan ini adalah
df.query('line_race != 0')
.sumber
query
. Ini memungkinkan untuk kriteria seleksi yang lebih kaya (mis. Operasi seperti set seperti didf.query('variable in var_list')
mana 'var_list' adalah daftar nilai yang diinginkan)query
tidak terlalu berguna jika nama kolom memiliki spasi di dalamnya.df = df.rename(columns=lambda x: x.strip().replace(' ','_'))
hanya untuk menambahkan solusi lain, khususnya berguna jika Anda menggunakan penilai panda baru, solusi lain akan menggantikan panda asli dan kehilangan penilai.
sumber
.reset_index()
juga jika seseorang akhirnya menggunakanJika Anda ingin menghapus baris berdasarkan beberapa nilai kolom, Anda dapat menggunakan:
Untuk menjatuhkan semua baris dengan nilai 0 dan 10 untuk
line_race
.sumber
drop = [0, 10]
dan kemudian sesuatu sepertidf[(df.line_race != drop)]
Jawaban yang diberikan adalah benar tanpa batas karena seseorang di atas mengatakan Anda dapat menggunakan
df.query('line_race != 0')
yang tergantung pada masalah Anda jauh lebih cepat. Sangat disarankan.sumber
DataFrame
nama variabel panjang seperti saya (dan, saya berani menebak, semua orang dibandingkan dengan yangdf
digunakan untuk contoh), karena Anda hanya perlu menulisnya sekali.Meskipun jawaban sebelumnya hampir mirip dengan apa yang akan saya lakukan, tetapi menggunakan metode indeks tidak memerlukan menggunakan metode pengindeksan lain .loc (). Hal ini dapat dilakukan dengan cara yang sama tetapi tepat seperti
sumber
Cara lain untuk melakukannya. Mungkin bukan cara yang paling efisien karena kode itu terlihat sedikit lebih kompleks daripada kode yang disebutkan dalam jawaban lain, tetapi masih merupakan cara alternatif untuk melakukan hal yang sama.
sumber
Saya mengkompilasi dan menjalankan kode saya. Ini adalah kode yang akurat. Anda bisa mencobanya sendiri.
Jika Anda memiliki karakter atau spasi khusus dalam nama kolom, Anda dapat menuliskannya
''
seperti pada kode yang diberikan:Jika hanya ada satu nama kolom string tanpa spasi atau karakter khusus, Anda dapat langsung mengaksesnya.
sumber
Hanya menambahkan cara lain untuk DataFrame diperluas ke semua kolom:
Contoh:
sumber