Получение списка из заголовков столбцов DataFrame в Pandas
Я хочу получить список заголовков столбцов из объекта DataFrame библиотеки Pandas. DataFrame будет поступать от пользователя, поэтому я не знаю заранее, сколько будет столбцов и как они будут называться.
Например, если мне предоставят 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
То я хотел бы получить список, выглядящий следующим образом:
['y', 'gdp', 'cap']
Как мне это сделать в Pandas?
5 ответ(ов)
Встроенный метод, который является наиболее производительным:
my_dataframe.columns.values.tolist()
Метод .columns
возвращает объект Index
, а .columns.values
возвращает массив, и у этого массива есть вспомогательная функция .tolist()
, которая преобразует его в список.
Если производительность для вас не так важна, объекты Index
определяют метод .tolist()
, который можно вызвать напрямую:
my_dataframe.columns.tolist()
Разница в производительности очевидна:
%timeit df.columns.tolist()
16.7 µs ± 317 ns за цикл (среднее ± стандартное отклонение за 7 запусков, 100000 циклов каждый)
%timeit df.columns.values.tolist()
1.24 µs ± 12.3 ns за цикл (среднее ± стандартное отклонение за 7 запусков, 1000000 циклов каждый)
Тем, кто не любит много печатать, можно просто вызвать list
на df
, вот так:
list(df)
С выходом Pandas 0.16.0 это стало еще проще:
df.columns.tolist()
Эта команда вернет названия колонок в удобном виде списка.
Чтобы вывести список столбцов в датафрейме во время отладки, используйте списковое включение:
>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']
Кстати, вы можете получить отсортированный список, просто используя функцию sorted
:
>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
Это доступно как my_dataframe.columns
.
Это действительно интересно! Как вы заметили, df.columns.values.tolist()
выполняется почти в три раза быстрее, чем df.columns.tolist()
, хотя на первый взгляд они могут показаться похожими.
Разница в производительности связана с тем, как Pandas обрабатывает эти две стройки. df.columns
возвращает объект типа Index
, который хранит метки столбцов. Когда вы используете df.columns.values
, вы фактически получаете массив значений, который в дальнейшем преобразуется в список с помощью tolist()
. Это также оптимизированный путь и происходит быстрее.
В случае df.columns.tolist()
, Pandas сначала вызывает метод tolist()
на объекте Index
, что может включать дополнительные операции. Поэтому, несмотря на то, что оба способа возвращают одну и ту же информацию, разница в реализации и оптимизации приводит к различным временным затратам.
Каждый вызов имеет свои преимущества, но если вам нужна максимальная производительность, то лучше использовать df.columns.values.tolist()
.
Как изменить порядок столбцов в DataFrame?
Изменение типа столбца в pandas
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Получить статистику для каждой группы (например, количество, среднее и т.д.) с помощью pandas GroupBy?