Xóa ba hàng đầu tiên của khung dữ liệu trong gấu trúc


177

Tôi cần xóa ba hàng đầu tiên của khung dữ liệu trong gấu trúc.

Tôi biết df.ix[:-1]sẽ xóa hàng cuối cùng, nhưng tôi không thể tìm ra cách xóa n hàng đầu tiên.


Đối với read_csv / read_html, bạn có thể sử dụng ví dụ: header=3đối số hàm tạo sẽ đặt hàng đó làm hàng tiêu đề: stackoverflow.com/a/51822697/191246
ccpizza

Câu trả lời:


261

Sử dụng iloc:

df = df.iloc[3:]

sẽ cung cấp cho bạn một df mới mà không có ba hàng đầu tiên.


1
không loại bỏ 4 hàng đầu tiên thay vì 3 hàng đầu tiên trong câu hỏi ban đầu?
tagoma

6
Không, không. Vị trí bắt đầu của lát luôn được bao gồm.
bdiamante

Bất cứ ai tình cờ biết làm thế nào để làm điều này trong một groupby()? Điều này hoạt động nhưng trả về các cột trùng lặp trong chỉ mụcdf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
citynorman

Vì vậy, nếu bạn muốn xóa từ hàng 3 sang hàng 9, chẳng hạn, bạn sẽ làm thế nào? df=df.iloc[3:9]?
MK

1
@MK nếu sử dụng phương pháp này, bạn có thể sử dụng kết hợp với pd.concat(). Một cái gì đó như , df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
bdiamante

100

Tôi nghĩ rằng một cách rõ ràng hơn để làm điều này là sử dụng thả.

Cú pháp là:

df.drop(label)

Và như được chỉ ra bởi @tim và @ChaimG, điều này có thể được thực hiện tại chỗ:

df.drop(label, inplace=True)

Một cách để thực hiện điều này có thể là:

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

Và một cách sử dụng "tại chỗ" khác:

df.drop(df.head(3).index, inplace=True)

5
dropthậm chí có thể được tính tại chỗ (không cần gán thêm). Nhanh hơn và đơn giản hơn!
tim

1
Để mở rộng ý tưởng của Tim, Ví dụ:df.drop(label, inplace=True)
ChaimG

Do chỉ số 0, tôi tin rằng đề xuất thực hiện sẽ xóa 4 hàng.
Daniel Morgan

1
@DanielMorgan Đó không phải là trường hợp vì phạm vi python là một nửa mở. Tại sao đó là một câu hỏi khác. Xem stackoverflow.com/questions/4504662/... hoặc quora.com/...
drexiya

2
@tim, theo điều này , inplacehoạt động không nhanh hơn. Ngoài ra, đơn giản hơn là một vấn đề quan điểm: Tôi thấy dễ đọc hơn khi mã không có inplacetham số.
toto_tico


6

Bạn có thể sử dụng cắt trăn, nhưng lưu ý rằng nó không tại chỗ.

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

những gì không tại chỗ có nghĩa là pandasgì?
cryanbhu

5
df.drop(df.index[[0,2]])

Pandas sử dụng đánh số dựa trên số 0, vì vậy 0 là hàng đầu tiên, 1 là hàng thứ hai và 2 là hàng thứ ba.


4

Một cách đơn giản là sử dụng đuôi (-n) để xóa n hàng đầu tiên

df=df.tail(-3)


0

inp0 = pd.read_csv ("bank_marketing_updated_v1.csv", bỏ qua = 2)

hoặc nếu bạn muốn làm trong khung dữ liệu hiện có

chỉ cần làm theo lệnh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.