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

Я хочу получить список заголовков столбцов от pandas 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']
Решение

Вы можете получить значения в виде списка, выполнив:

list(my_dataframe.columns.values)

Также вы можете просто использовать: (как показано в ответе Эда Чума):

list(my_dataframe)
Комментарии (10)

Существует встроенный метод, который является наиболее эффективным:

my_dataframe.columns.values.tolist()

.columns возвращает индекс, .columns.values возвращает массив, и у него есть вспомогательная функция .tolist для возврата списка.

Если производительность не так важна для вас, объекты Index определяют метод .tolist (), который вы можете вызвать напрямую:

my_dataframe.columns.tolist()

Разница в производительности очевидна:

%timeit df.columns.tolist()
16.7 µs ± 317 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit df.columns.values.tolist()
1.24 µs ± 12.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Для тех, кто ненавидит печатать, вы можете просто вызвать list на df, так:

list(df)
Комментарии (6)

Провел несколько быстрых тестов, и, возможно, неудивительно, что встроенная версия с использованием dataframe.columns.values.tolist () является самой быстрой:

In [1]: %timeit [column for column in df]
1000 loops, best of 3: 81.6 µs per loop

In [2]: %timeit df.columns.values.tolist()
10000 loops, best of 3: 16.1 µs per loop

In [3]: %timeit list(df)
10000 loops, best of 3: 44.9 µs per loop

In [4]: % timeit list(df.columns.values)
10000 loops, best of 3: 38.4 µs per loop

(Мне все еще очень нравится list (dataframe), так что спасибо EdChum!)

Комментарии (0)

Это становится еще проще (пуандами 0.16.0):

df.columns.tolist()

даст вам имена столбцов в хорошем списке.

Комментарии (0)
>>> list(my_dataframe)
['y', 'gdp', 'cap']

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

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

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

>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
Комментарии (2)

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

Комментарии (2)

Интересно, но df.columns.values.tolist () почти в 3 раза быстрее, чем df.columns.tolist (), но я подумал, что они одинаковы:

In [97]: %timeit df.columns.values.tolist()
100000 loops, best of 3: 2.97 µs per loop

In [98]: %timeit df.columns.tolist()
10000 loops, best of 3: 9.67 µs per loop
Комментарии (1)

Удивлен, что я до сих пор не видел это, поэтому я просто оставлю это здесь.

Расширенная итерируемая распаковка (python3.5+): [* df] и Друзья

Распаковка обобщений (PEP 448) была представлена на Python 3.5. Итак, все следующие операции возможны.

df = pd.DataFrame('x', columns=['A', 'B', 'C'], index=range(5))
df

   A  B  C
0  x  x  x
1  x  x  x
2  x  x  x
3  x  x  x
4  x  x  x 

& Лт;!- > ;

Если вы хотите list....

[*df]
# ['A', 'B', 'C']

Или, если вы хотите set,

{*df}
# {'A', 'B', 'C'}

Или, если вы хотите tuple,

*df,  # Please note the trailing comma
# ('A', 'B', 'C')

Или, если вы хотите где-то сохранить результат

*cols, = df  # A wild comma appears, again
cols
# ['A', 'B', 'C']

если вы тот человек, который преобразует кофе в типирование звуков, ну, это будет потреблять ваш кофе более эффективно;)...

П.С .: если производительность важна, вы захотите угробить решения выше в пользу

df.columns.to_numpy () .tolist ()

['A', 'B', 'C']

Это похоже на Эда Чама ответ, но обновлен для v0.24, где .to_numpy () предпочтительнее использования .values. Видеть этот ответ (от меня) для получения дополнительной информации.

Визуальная проверка Поскольку я видел это в других ответах, вы можете использовать итерацию распаковки (нет необходимости в явных циклах).

print(*df)
A B C

print(*df, sep='\n')
A
B
C

Критика других методов

Не используйте явный цикл for для операции, которую можно выполнить в одной строке (комплекты списка в порядке).

Далее, использование sorted (df) не сохраняет первоначальный порядок столбцов. Для этого вы должны использовать list (df) вместо этого.

Далее, list (df.columns)иlist (df.columns.values) являются плохими предложениями (по состоянию на текущую версию, v0.24). И массивы Index (возвращается из df.columns), и массивы NumPy (возвращаются df.columns.values) определяют метод .tolist (), который является более быстрым и идиоматичным.

Наконец, лестификация, т.е.list (df) следует использовать только в качестве краткой альтернативы вышеупомянутым методам.

Комментарии (0)

A DataFrame следует диктоподобному соглашению итерации над «ключи» объектов.

my_dataframe.keys()

Создать список ключей / столбцов - метод объекта to_list () и питонический путь

my_dataframe.keys().to_list()
list(my_dataframe.keys())

Базовая итерация в DataFrame возвращает метки столбцов

[column for column in my_dataframe]

Не конвертируйте DataFrame в список, просто чтобы получить метки столбцов. Не переставайте думать при поиске удобных образцов кода.

& Лт;!- язык: питон - >

xlarge = pd.DataFrame(np.arange(100000000).reshape(10000,10000))
list(xlarge) #compute time and memory consumption depend on dataframe size - O(N)
list(xlarge.keys()) #constant time operation - O(1)
Комментарии (2)

В тетради

Для исследования данных в ноутбуке IPython мой предпочтительный способ заключается в следующем:

sorted(df)

Который создаст легко читаемый алфавитно упорядоченный список.

В хранилище кода

В коде я нахожу это более явным

df.columns

Потому что это говорит другим, читающим ваш код, что вы делаете.

Комментарии (2)
%% timeit
final_df.columns.values.tolist ()
948 нс & # 177; 19,2 нс за цикл (среднее значение & # 177; std. dev. из 7 пробежек, 1000000 циклов каждый)
%% timeit
list (final_df.columns)
14,2 и № 181; s & # 177; 79,1 нс за цикл (среднее значение & # 177; std. dev. из 7 пробежек, 100000 циклов каждый)
%% timeit
list (final_df.columns.values)
1,88 & # 181; s & # 177; 11,7 нс за цикл (среднее значение & # 177; std. dev. из 7 пробежек, 1000000 циклов каждый)
%% timeit
final_df.columns.tolist ()
12,3 и # 181; s & # 177; 27,4 нс за цикл (среднее значение & # 177; std. dev. из 7 пробежек, 100000 циклов каждый)
%% timeit
list (final_df.head (1) .columns)
163 & # 181; s & # 177; 20,6 и # 181; с на цикл (среднее значение & # 177; std. dev. из 7 пробежек, 10000 циклов каждый)
Комментарии (0)

в ответ Симеон Виссер...Вы могли бы сделать

list(my_dataframe.columns.values) 

или

list(my_dataframe) # for less typing.

Но я думаю, что самое приятное место:

list(my_dataframe.columns)

Это явно, в то же время не излишне долго.

Комментарии (1)

Для быстрой, аккуратной, визуальной проверки попробуйте это:

for col in df.columns:
    print col
Комментарии (0)

Это дает нам имена столбцов в списке:

list(my_dataframe.columns)

Также можно использовать другую функцию, называемую tolist ():

my_dataframe.columns.tolist()
Комментарии (1)

Я чувствую, что вопрос заслуживает дополнительного объяснения.

Как отметил @fixxxer, ответ зависит от версии pandas, которую вы используете в своем проекте. Который вы можете получить с помощью команды pd.__version__.

Если вы по какой-то причине похожи на меня (на Debian Jessie я использую 0.14.1), используя более старую версию Pandas, чем 0.16.0, то вам нужно использовать:

df.keys () .tolist (), потому что метод df.columns еще не реализован.

Преимущество этого метода ключей в том, что он работает даже в более новой версии панд, поэтому он более универсален.

Комментарии (1)
n = []
for i in my_dataframe.columns:
    n.append(i)
print n
Комментарии (3)

Хотя решение, которое было предоставлено выше, приятно. Я также ожидал бы, что что-то вроде frame.column_names () будет функцией в pandas, но, поскольку это не так, возможно, было бы неплохо использовать следующий синтаксис. Это каким-то образом сохраняет ощущение, что вы используете панды надлежащим образом, вызывая функцию «толист»: frame.columns.tolist ()

frame.columns.tolist() 
Комментарии (1)

Это решение перечисляет все столбцы вашего объекта my_dataframe:

print(list(my_dataframe))
Комментарии (1)