13

Получение списка из заголовков столбцов DataFrame в Pandas

10

Я хочу получить список заголовков столбцов из объекта 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 ответ(ов)

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)
0

С выходом Pandas 0.16.0 это стало еще проще:

df.columns.tolist()

Эта команда вернет названия колонок в удобном виде списка.

0

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

>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']

Кстати, вы можете получить отсортированный список, просто используя функцию sorted:

>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
0

Это доступно как my_dataframe.columns.

0

Это действительно интересно! Как вы заметили, 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().

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь