Видаліть перші три рядки фрейму даних у пандах


177

Мені потрібно видалити перші три рядки фрейму даних у пандах.

Я знаю, df.ix[:-1]що видалить останній ряд, але я не можу зрозуміти, як видалити перші n рядків.


Для read_csv / read_html ви можете використовувати , наприклад , header=3конструктор аргумент , який буде встановлювати цей рядок як рядок заголовка: stackoverflow.com/a/51822697/191246
ccpizza

Відповіді:


263

Використання iloc:

df = df.iloc[3:]

дасть вам новий df без перших трьох рядків.


1
хіба це не видаляє перші 4 ряди замість перших 3 рядків у початковому запитанні?
тагома

6
Ні, це не так. Початкове положення зрізу завжди включене.
бдіаманте

Хто-небудь трапляється знати, як це зробити в groupby()? Це працює, але повертає дублікати стовпців у індексіdf=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
citynorman

Отже, якщо ви хочете видалити, наприклад, з рядка 3 до рядка 9, як би ви це зробили? df=df.iloc[3:9]?
МК

1
@MK, якщо використовувати такий підхід, ви можете використовувати це в поєднанні з pd.concat(). Що - щось на зразок df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
бдіаманте

100

Я думаю, що більш чіткий спосіб зробити це - використовувати drop.

Синтаксис:

df.drop(label)

І як вказували @tim та @ChaimG, це можна зробити на місці:

df.drop(label, inplace=True)

Одним із способів здійснення цього може бути:

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

І ще одне використання "на місці":

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

5
dropможна навіть обчислити на місці (без додаткового призначення). Швидше і простіше!
час

1
Щоб розширити ідею Тіма, Приклад:df.drop(label, inplace=True)
ChaimG

Через індекс 0 я вважаю, що пропозиція щодо реалізації видалить 4 рядки.
Даніель Морган

1
@DanielMorgan Це не так, оскільки діапазони пітона напіввідкриті. Що стосується того, чому це так, інше питання. Див stackoverflow.com/questions/4504662 / ... або quora.com / ...
drexiya

2
@tim, відповідно до цього , inplaceоперації не швидші. Крім того, простішим є питання думки: мені легше читати, коли в коді немає inplaceпараметрів.
toto_tico


6

Можна використовувати нарізки пітона, але зауважте, що він не є на місці.

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

що не означає на місці pandas?
cryanbhu

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

Панди використовують нульову нумерацію, тому 0 - це перший рядок, 1 - другий, а 2 - третій.


4

Простий спосіб - використовувати хвіст (-n) для видалення перших n рядів

df=df.tail(-3)


0

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

або якщо ви хочете зробити це в існуючому кадрі даних

просто виконайте наступну команду

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.