Удалите первые три строки кадра данных в пандах


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
Нет, это не так. Начальная позиция среза всегда включена.
bdiamante

Кто-нибудь случайно знает, как это сделать 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:]]).
bdiamante

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 Это не так, поскольку диапазоны Python наполовину открыты. А почему это другой вопрос? См stackoverflow.com/questions/4504662/... или quora.com/...
drexiya

2
@tim, в соответствии с этим , inplaceоперации не быстрее. Кроме того, проще вопрос мнения: мне легче читать, когда код не имеет inplaceпараметров.
toto_tico


6

Вы можете использовать нарезку Python, но обратите внимание, что это не на месте.

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?
крианбху

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

Pandas использует нумерацию с нуля, поэтому 0 - это первая строка, 1 - вторая строка и 2 - третья строка.


4

Простой способ - использовать tail (-n) для удаления первых n строк.

df=df.tail(-3)


0

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

или если вы хотите сделать в существующем фрейме данных

просто выполните следующую команду

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.