2016-01-06 6 views
1

У меня есть тип данных серии, который был сгенерирован путем вычитания двух столбцов из кадра данных pandas.Удаление элементов из серии pandas в python

Я хочу удалить первый элемент из серии, который будет x[-1] в R. Я могу заставить его работать в классе np array, но класс серии не работает.

+0

ли x.idx [-1,] делать то, что вы хотите? – jwdink

+0

Он говорит, что объект «Серии» не имеет атрибута «idx» – jay2020

+0

Извините, я имел в виду iloc, а не idx. – jwdink

ответ

8

Использование integer нарезку на основе должен работать - (see docs):

s.iloc[1:] 

Если вы предпочитаете drop, а не slice, вы можете использовать встроенный в drop метод:

s.drop(s.index[0]) 

Чтобы удалить несколько позиций, вы бы включили list из index позиций:

s.drop(s.index[[0, 2, 4]]) 

или slice:

s.drop(s.index[1: 4]) 
+0

Использование 'drop' здесь - действительно приятное решение. Я уже поддержал ваш первый ответ, но я думаю, что это редактирование еще лучше. – johnchase

1

Python не есть способ нарезки из позиции, таким образом, что R делает. Если вам нужно удалить только первый или последний элемент, то предыдущее опубликованное решение: s.iloc[1:], вероятно, самое лучшее. Если вам нужно удалить несколько элементов, или элемент в середине вашей серии вы можете сделать это с помощью следующих условий:

In [29]: x = pd.Series(np.random.randn(10)) 

In [34]: x[~x.index.isin([0, 3, 4])] 
Out[34]: 1 0.884089 
     2 0.921271 
     5 -0.847967 
     6 -0.088892 
     7 -0.765241 
     8 -0.084489 
     9 -0.581152 
     dtype: float64 

В этом случае мы удалили 0, 3 и 4 позиции.

Это немного грязнее, так что, как я сказал, предыдущее решение может быть лучшим для вас, но это имеет некоторые дополнительные функции.

Стоит отметить, что это решение будет работать только если ваш индекс числовой и последовательный, начиная с 0.

+0

Есть x.drop (x.index [[0, 3, 4]]). – Stefan

Смежные вопросы