При удалении столбца в DataFrame я использую:
del df['column_name']
И это прекрасно работает. Почему я не могу использовать следующее?
del df.column_name
Поскольку вы можете получить доступ к столбцу / серии как df.column_name
, я ожидаю, что это сработает.
10 ответов
Как вы уже догадались, правильный синтаксис
del df['column_name']
Трудно заставить del df.column_name
работать просто из-за синтаксических ограничений в Python. del df[name]
переводится на df.__delitem__(name)
под прикрытием Python.
Еще один способ удаления столбца в Pandas DataFrame
Если вы не ищете удаление на месте, то вы можете создать новый DataFrame, указав столбцы с помощью функции DataFrame(...)
как
my_dict = { 'name' : ['a','b','c','d'], 'age' : [10,20,25,22], 'designation' : ['CEO', 'VP', 'MD', 'CEO']}
df = pd.DataFrame(my_dict)
Создайте новый DataFrame как
newdf = pd.DataFrame(df, columns=['name', 'age'])
Вы получаете такой же хороший результат, как и результат del / drop
Падение по индексу
Удалить первый, второй и четвертый столбцы:
df.drop(df.columns[[0,1,3]], axis=1, inplace=True)
Удалить первый столбец:
df.drop(df.columns[[0]], axis=1, inplace=True)
Существует необязательный параметр inplace
, чтобы исходный данные могут быть изменены без создания копии.
Popped
Выбор, добавление, удаление столбцов
Удалить столбец column-name
:
df.pop('column-name')
Примеры:
df = DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]), ('C', [7,8, 9])], orient='index', columns=['one', 'two', 'three'])
print df
:
one two three
A 1 2 3
B 4 5 6
C 7 8 9
df.drop(df.columns[[0]], axis=1, inplace=True)
print df
:
two three
A 2 3
B 5 6
C 8 9
three = df.pop('three')
print df
:
two
A 2
B 5
C 8
Лучший способ сделать это в пандах - это использовать {{ X0 } } :
df = df.drop('column_name', 1)
Где 1
- это число оси (0
для строк и 1
для столбцов.)
Чтобы удалить столбец без переназначения df
, вы можете сделать:
df.drop('column_name', axis=1, inplace=True)
Наконец, чтобы удалить столбец номер вместо столбца метка , попробуйте удалить его, например. 1-й, 2-й и 4-й столбцы:
df = df.drop(df.columns[[0, 1, 3]], axis=1) # df.columns is zero-based pd.Index
Также работает с «текстовым» синтаксисом для столбцов:
df.drop(['column_nameA', 'column_nameB'], axis=1, inplace=True)
Приятным дополнением является возможность отбрасывать столбцы, только если они существуют . Таким образом, вы можете охватить больше вариантов использования, и он удалит только существующие столбцы из меток, переданных ему:
Просто добавьте errors = 'ignore' , например:
df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')
- Это новинка от панд 0.16.1 и выше. Документация находится здесь.
С версии 0.16.1 вы можете сделать
df.drop(['column_name'], axis = 1, inplace = True, errors = 'ignore')
Рекомендуется всегда использовать нотацию []
. Одна из причин заключается в том, что обозначение атрибута (df.column_name
) не работает для пронумерованных индексов:
In [1]: df = DataFrame([[1, 2, 3], [4, 5, 6]])
In [2]: df[1]
Out[2]:
0 2
1 5
Name: 1
In [3]: df.1
File "<ipython-input-3-e4803c0d1066>", line 1
df.1
^
SyntaxError: invalid syntax
Использование:
columns = ['Col1', 'Col2', ...]
df.drop(columns, inplace=True, axis=1)
Это удалит один или несколько столбцов на месте. Обратите внимание, что inplace=True
был добавлен в pandas v0.13 и не будет работать в более старых версиях. Вы должны были бы присвоить результат обратно в этом случае:
df = df.drop(columns, axis=1)
Панды 0.21+ ответ
Версия Pandas 0.21 изменила drop
метод немного включает в себя оба параметра index
и columns
для соответствия сигнатуре методов rename
и reindex
.
df.drop(columns=['column_a', 'column_c'])
Лично я предпочитаю использовать параметр axis
для обозначения столбцов или индекса, поскольку это основной параметр ключевого слова, используемый почти во всех методах панд. Но теперь у вас есть несколько добавленных вариантов в версии 0.21.
В пандах 0.16.1+ вы можете отбрасывать столбцы, только если они существуют в соответствии с решением, опубликованным @eiTanLaVi. До этой версии вы можете достичь того же результата с помощью понимания условного списка:
df.drop([col for col in ['col_name_1','col_name_2',...,'col_name_N'] if col in df],
axis=1, inplace=True)
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.