Я хочу получить список заголовков столбцов в панде DataFrame. DataFrame будет поступать от пользователя, поэтому я не буду знать, сколько будет столбцов или как они будут называться.
Например, если мне дан DataFrame, как это:
>>> my_dataframe
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
Я хотел бы получить список как это:
>>> header_list
['y', 'gdp', 'cap']
[*df]
болееlist(df)
илиdf.columns.tolist()
, это благодаря распаковке обобщений (PEP 448) .Ответы:
Вы можете получить значения в виде списка, выполнив:
Также вы можете просто использовать: (как показано в ответе Эда Чума ):
источник
columns
атрибута?df.column_names()
. Правильно ли этот ответ или он устарел?Существует встроенный метод, который наиболее эффективен:
.columns
возвращает индекс,.columns.values
возвращает массив и имеет вспомогательную функцию.tolist
для возврата списка.Если производительность не так важна для вас,
Index
объекты определяют.tolist()
метод, который вы можете вызвать напрямую:Разница в производительности очевидна:
Для тех , кто ненавидит печатать, вы можете просто позвонить
list
поdf
, как это:источник
DataFrame
итерируемого не изменилась с первого дня: pandas.pydata.org/pandas-docs/stable/basics.html#iteration . Итерируемое значение, возвращаемое из DataFrame, всегда было столбцами, поэтому выполнениеfor col in df:
всегда должно вести себя одинаково, если разработчики не потерпели крахlist(df)
и не должны оставаться допустимым методом. Обратите внимание, чтоdf.keys()
вызов внутренней реализации dict-like структуры возвращает ключи, являющиеся столбцами. Необъяснимое понижение - это побочный ущерб, который стоит ожидать от SO, так что не волнуйтесьcolumns
атрибута. Час назад я прочитал о Законе Деметры, пропагандирующем, что вызывающий объект не должен зависеть от навигации по внутренней объектной модели.list(df)
делает явное преобразование типов. Заметный побочный эффект: увеличение времени выполнения и потребления памяти с помощьюdf.keys()
метода размера данных является частью dict-подобной природы aDataFrame
. Примечательный факт: время выполнения дляdf.keys()
довольно постоянное независимо от размера фрейма данных - часть ответственности разработчиков панд.Провел несколько быстрых тестов, и, возможно, неудивительно, что встроенная версия, используемая
dataframe.columns.values.tolist()
быстрее всего:(Мне все еще очень нравится это
list(dataframe)
, так что спасибо EdChum!)источник
Это становится еще проще (панды 0.16.0):
даст вам имена столбцов в хорошем списке.
источник
Чтобы вывести список столбцов данных в режиме отладчика, используйте понимание списка:
Кстати, вы можете получить отсортированный список просто используя
sorted
:источник
list(df)
работать только с автокадрами данных? Или это работает для всех фреймов данных?[c for c in df]
.Удивлен, я еще не видел это опубликовано, поэтому я просто оставлю это здесь.
Расширенная повторяемая распаковка (python3.5 +):
[*df]
и друзьяОбобщения распаковки (PEP 448) были введены в Python 3.5. Итак, следующие операции все возможны.
Если вы хотите
list
....Или, если вы хотите
set
,Или, если вы хотите
tuple
,Или, если вы хотите сохранить результат где-то,
... если вы тот человек, который превращает кофе в печатание звуков, ну, это будет потреблять ваш кофе более эффективно;)
Визуальная проверка
Поскольку я видел это в других ответах, вы можете использовать итеративную распаковку (нет необходимости в явных циклах).
Критика других методов
Не используйте явный
for
цикл для операции, которая может быть сделана в одной строке (списки в порядке).Далее, использование
sorted(df)
не сохраняет первоначальный порядок столбцов. Для этого вы должны использоватьlist(df)
вместо этого.Далее,
list(df.columns)
иlist(df.columns.values)
плохие предложения (по состоянию на текущую версию, v0.24). ОбаIndex
(возвращено изdf.columns
) и массивы NumPy (возвращеноdf.columns.values
) определяют.tolist()
метод, который быстрее и более идиоматичен.Наконец, listification, т. Е.
list(df)
Должен использоваться только в качестве краткой альтернативы вышеупомянутым методам для python <= 3.4, где расширенная распаковка недоступна.источник
Это доступно как
my_dataframe.columns
.источник
header_list = list(my_dataframe.columns)
df.columns.tolist()
.Это интересно, но
df.columns.values.tolist()
почти в 3 раза быстрее,df.columns.tolist()
но я подумал, что они одинаковые:источник
.values
возвращает базовый массив NumPy, и выполнение чего-либо с помощью NUMPY почти всегда происходит быстрее, чем выполнение того же самого с пандами напрямую.DataFrame следует Dict-как конвенция итерации «ключи» объекты.
Создать список ключей / столбцов - метод объекта
to_list()
и питонический способБазовая итерация в DataFrame возвращает метки столбцов
Не конвертируйте DataFrame в список, просто чтобы получить метки столбцов. Не переставайте думать, ища удобные примеры кода.
источник
df.columns
намного быстрее, чемdf.keys()
. Не уверен, почему у них есть и функция, и атрибут для одной и той же вещи (ну, я не первый раз видел 10 разных способов сделать что-то в пандах).В тетради
Для исследования данных в записной книжке IPython мой предпочтительный способ заключается в следующем:
Который будет производить легко читаемый в алфавитном порядке список.
В репозитории кода
В коде я нахожу это более явным
Потому что он говорит другим, читающим ваш код, что вы делаете.
источник
sorted(df)
меняет порядок. Используйте с осторожностью.источник
как ответил Симеон Виссер ... вы могли бы сделать
или
Но я думаю, что самое приятное место это:
Это явно, в то же время не излишне долго.
источник
list
имеет смысла, если вы не вызываете егоdf
напрямую (например, для краткости). Доступ к.columns
атрибуту возвращаетIndex
объект, для которогоtolist()
определен метод, и вызов которого более идиоматичен, чем прослушиваниеIndex
. Смешивать идиомы только ради полноты - не лучшая идея. То же самое относится и к списку массивов, из которых вы получаете.values
.Для быстрой, аккуратной визуальной проверки попробуйте это:
источник
Это дает нам имена столбцов в списке:
Также можно использовать другую функцию с именем tolist ():
источник
Мне кажется, вопрос заслуживает дополнительного объяснения.
Как заметил @fixxxer, ответ зависит от версии панд, которую вы используете в своем проекте. Который вы можете получить с помощью
pd.__version__
команды.Если вы по какой-то причине, как я (в Debian Jessie, я использую 0.14.1), используете более старую версию панд, чем 0.16.0, тогда вам нужно использовать:
df.keys().tolist()
потому чтоdf.columns
метод еще не реализован.Преимущество этого метода ключей в том, что он работает даже в более новых версиях панд, поэтому он более универсален.
источник
источник
[n for n in dataframe.columns]
Хотя решение, которое было предоставлено выше, приятно. Я также ожидал бы, что что-то вроде frame.column_names () будет функцией в пандах, но, поскольку это не так, возможно, было бы неплохо использовать следующий синтаксис. Это каким-то образом сохраняет ощущение, что вы используете панды надлежащим образом, вызывая функцию «tolist»: frame.columns.tolist ()
источник
Если у DataFrame есть Index или MultiIndex, и вы хотите, чтобы они также были включены в качестве имен столбцов:
Это позволяет избежать вызова метода reset_index (), который приводит к ненужному снижению производительности для такой простой операции.
Я сталкивался с необходимостью это чаще, потому что я перемещаю данные из баз данных, где индекс информационного кадра сопоставляется с первичным / уникальным ключом, но для меня это просто еще один «столбец». Вероятно, для панд имеет смысл иметь встроенный метод для чего-то подобного (вполне возможно, что я его пропустил).
источник
Это решение перечисляет все столбцы вашего объекта my_dataframe:
источник