Hapus tiga baris pertama dari kerangka data dalam panda

177

Saya perlu menghapus tiga baris pertama dari dataframe di panda.

Saya tahu df.ix[:-1]akan menghapus baris terakhir, tetapi saya tidak tahu cara menghapus n baris pertama.

Nilani Algiriyage
sumber
Untuk read_csv / read_html Anda dapat menggunakan misal header=3argumen konstruktor yang akan menetapkan baris itu sebagai baris header: stackoverflow.com/a/51822697/191246
ccpizza

Jawaban:

263

Gunakan iloc:

df = df.iloc[3:]

akan memberi Anda df baru tanpa tiga baris pertama.

bdiamante
sumber
1
bukankah itu menghapus 4 baris pertama, bukan 3 baris pertama dalam pertanyaan asli?
tagoma
6
Tidak, tidak. Posisi awal irisan selalu disertakan.
bdiamante
Adakah yang tahu cara melakukan ini dalam groupby()? Ini berfungsi tetapi mengembalikan kolom duplikat dalam indeksdf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
citynorman
Jadi, jika Anda ingin menghapus dari baris 3 ke baris 9, misalnya, bagaimana Anda melakukannya? df=df.iloc[3:9]?
MK
1
@MK jika menggunakan pendekatan ini, Anda dapat menggunakan ini dalam kombinasi dengan pd.concat(). Sesuatu seperti df2 = pd.concat([df.iloc[:3],df.iloc[10:]]),.
bdiamante
100

Saya pikir cara yang lebih eksplisit untuk melakukan ini adalah dengan menggunakan drop.

Sintaksnya adalah:

df.drop(label)

Dan seperti yang ditunjukkan oleh @tim dan @ChaimG, ini dapat dilakukan di tempat:

df.drop(label, inplace=True)

Salah satu cara untuk mengimplementasikan ini adalah:

df.drop(df.index[:3], inplace=True)

Dan penggunaan "di tempat" yang lain:

df.drop(df.head(3).index, inplace=True)
drexiya
sumber
5
dropbahkan dapat dihitung di tempat (tanpa tugas tambahan). Lebih cepat dan lebih sederhana!
tim
1
Untuk memperluas ide Tim, Contoh:df.drop(label, inplace=True)
ChaimG
Karena indeks 0, saya yakin saran implementasi akan menghapus 4 baris.
Daniel Morgan
1
@DanielMorgan Itu tidak terjadi karena rentang python setengah terbuka. Mengapa demikian, adalah pertanyaan lain. Lihat stackoverflow.com/questions/4504662/… atau quora.com/…
drexiya
2
@tim, menurut ini , inplaceoperasi tidak lebih cepat. Juga, lebih sederhana adalah masalah pendapat: Saya merasa lebih mudah dibaca ketika kode tidak memiliki inplaceparameter.
toto_tico
9
df = df.iloc[n:]

n menjatuhkan n baris pertama.

Pengodean
sumber
6

Anda bisa menggunakan irisan python, tetapi perhatikan itu bukan di tempat.

In [15]: import pandas as pd
In [16]: import numpy as np
In [17]: df = pd.DataFrame(np.random.random((5,2)))
In [18]: df
Out[18]:
          0         1
0  0.294077  0.229471
1  0.949007  0.790340
2  0.039961  0.720277
3  0.401468  0.803777
4  0.539951  0.763267

In [19]: df[3:]
Out[19]:
          0         1
3  0.401468  0.803777
4  0.539951  0.763267
jenggot
sumber
apa artinya tidak di tempat pandas?
cryanbhu
5
df.drop(df.index[[0,2]])

Panda menggunakan penomoran berbasis nol, jadi 0 adalah baris pertama, 1 adalah baris kedua dan 2 adalah baris ketiga.

Anupam khare
sumber
4

Cara sederhana adalah dengan menggunakan tail (-n) untuk menghapus n baris pertama

df=df.tail(-3)

mxia
sumber
0

inp0 = pd.read_csv ("bank_marketing_updated_v1.csv", skiprows = 2)

atau jika Anda ingin melakukannya dalam kerangka data yang ada

cukup lakukan perintah berikut

Rahul kuchhadia
sumber