Saya memiliki dataframe df:
>>> df
sales discount net_sales cogs
STK_ID RPT_Date
600141 20060331 2.709 NaN 2.709 2.245
20060630 6.590 NaN 6.590 5.291
20060930 10.103 NaN 10.103 7.981
20061231 15.915 NaN 15.915 12.686
20070331 3.196 NaN 3.196 2.710
20070630 7.907 NaN 7.907 6.459
Lalu saya ingin drop baris dengan nomor urut tertentu yang ditunjukkan dalam daftar, anggap di sini [1,2,4],
kemudian dibiarkan:
sales discount net_sales cogs
STK_ID RPT_Date
600141 20060331 2.709 NaN 2.709 2.245
20061231 15.915 NaN 15.915 12.686
20070630 7.907 NaN 7.907 6.459
Bagaimana atau fungsi apa yang bisa melakukan itu?
Jawaban:
Gunakan DataFrame.drop dan berikan serangkaian label indeks:
sumber
axis=0
(0 = baris, 1 = kolom) daninplace=True
seperti padadf.drop(df.index[[1,3]], axis=0, inplace=True)
. @mezzanaccio, jika Anda secara khusus tahu indeks mana yang ingin Anda ganti (dan juga menggunakan contoh 0 to n):df.drop(df.index[range(0, n)], axis=0, inplace=True)
Perhatikan bahwa mungkin penting untuk menggunakan perintah "inplace" saat Anda ingin melakukan drop in line.
Karena pertanyaan awal Anda tidak mengembalikan apa pun, perintah ini harus digunakan. http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.drop.html
sumber
Jika DataFrame sangat besar, dan jumlah baris untuk turun juga besar, maka penurunan sederhana menurut indeks
df.drop(df.index[])
membutuhkan terlalu banyak waktu.Dalam kasus saya, saya memiliki DataFrame multi-diindeks mengapung
100M rows x 3 cols
, dan saya perlu menghapus10k
baris dari itu. Metode tercepat yang saya temukan adalah, cukup berlawanan dengan intuisi, ketake
baris yang tersisa.Membiarkan
indexes_to_drop
menjadi array indeks posisi untuk dijatuhkan ([1, 2, 4]
dalam pertanyaan).Dalam kasus saya ini memakan waktu
20.5s
, sementara yang sederhanadf.drop
mengambil5min 27s
dan menghabiskan banyak memori. DataFrame yang dihasilkan adalah sama.sumber
Anda juga dapat lolos ke DataFrame.drop yang label sendiri (bukan Series label index):
Yang setara dengan:
sumber
Saya memecahkan ini dengan cara yang lebih sederhana - hanya dalam 2 langkah.
Langkah 1: Pertama bentuk bingkai data dengan baris / data yang tidak diinginkan.
Langkah 2: Gunakan indeks kerangka data yang tidak diinginkan ini untuk melepaskan baris dari kerangka data asli.
Contoh:
Misalkan Anda memiliki dataframe df yang banyak kolom termasuk 'Umur' yang merupakan bilangan bulat. Sekarang katakanlah Anda ingin menghapus semua baris dengan 'Umur' sebagai angka negatif.
Langkah 1: df_age_negative = df [df ['Age'] <0]
Langkah 2: df = df.drop (df_age_negative.index, axis = 0)
Semoga ini lebih sederhana dan membantu Anda.
sumber
Jika saya ingin menjatuhkan baris yang memiliki misalkan indeks
x
, saya akan melakukan hal berikut:Jika saya ingin menjatuhkan beberapa indeks (misalkan indeks ini ada dalam daftar
unwanted_indices
), saya akan melakukan:sumber
Berikut adalah contoh spesifik, saya ingin menunjukkan. Katakanlah Anda memiliki banyak entri duplikat di beberapa baris Anda. Jika Anda memiliki entri string, Anda dapat dengan mudah menggunakan metode string untuk menemukan semua indeks untuk dijatuhkan.
Dan sekarang untuk menjatuhkan baris-baris itu menggunakan indeks mereka
sumber
Dalam komentar ke jawaban @ theodros-zelleke, @ j-jones bertanya tentang apa yang harus dilakukan jika indeks tidak unik. Saya harus menghadapi situasi seperti itu. Apa yang saya lakukan adalah mengganti nama duplikat dalam indeks sebelum saya menelepon
drop()
, a la:di mana
rename_duplicates()
fungsi yang saya definisikan melalui elemen indeks dan mengganti nama duplikat. Saya menggunakan pola penggantian nama yang sama seperti yangpd.read_csv()
digunakan pada kolom, yaitu"%s.%d" % (name, count)
, di mananame
nama baris dancount
berapa kali itu terjadi sebelumnya.sumber
Menentukan indeks dari boolean seperti yang dijelaskan di atas misalnya
memori bisa lebih intensif daripada menentukan indeks menggunakan metode ini
diterapkan seperti itu
Metode ini berguna saat berurusan dengan kerangka data yang besar dan memori yang terbatas.
sumber
Gunakan hanya Indeks arg untuk melepas baris: -
Untuk beberapa baris: -
sumber
Pertimbangkan contoh bingkai data
kami ingin menghapus baris indeks 2 dan 3.
Pendekatan 1:
Pendekatan 2
sumber