Ответ 1
Вы можете получить значения в виде списка, выполнив:
list(my_dataframe.columns.values)
Также вы можете просто использовать: (как показано в ответе Эд Чум):
list(my_dataframe)
Я хочу получить список заголовков столбцов в панде 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)
Существует встроенный метод, который наиболее эффективен:
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)
Сделал несколько быстрых тестов, и, возможно, неудивительно, что встроенная версия с 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!)
Его становится еще проще (pandas 0.16.0):
df.columns.tolist()
предоставит вам имена столбцов в хорошем списке.
>>> list(my_dataframe)
['y', 'gdp', 'cap']
Чтобы вывести список столбцов данных в режиме отладчика, используйте понимание списка:
>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']
Кстати, вы можете получить отсортированный список просто с помощью sorted
:
>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
Это доступно как my_dataframe.columns
.
Интересно, но 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
Удивлен, я не видел это опубликовано до сих пор, поэтому я просто оставлю это здесь.
[*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']
... если вы тот человек, который превращает кофе в печатание звуков, ну, это будет потреблять ваш кофе более эффективно;)
PS: если важна производительность, вам нужно отказаться от вышеупомянутых решений в пользу
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()
который работает быстрее и более идиоматичен.
Наконец, listification, то есть list(df)
должен использоваться только как краткая альтернатива вышеупомянутым методам.
DataFrame следует заговоренным соглашением итерации по "ключам" объектов.
my_dataframe.keys()
Создайте список ключей/столбцов - метод объекта to_list()
и pythonic way
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)
Для исследования данных в ноутбуке IPython, мой предпочтительный способ:
sorted(df)
Будет создан удобный для чтения алфавитно упорядоченный список.
В коде я нахожу более явным, чтобы делать
df.columns
Потому что он говорит другим, читающим ваш код, что вы делаете.
%%timeit
final_df.columns.values.tolist()
948 ns ± 19.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
list(final_df.columns)
14.2 µs ± 79.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.columns.values)
1.88 µs ± 11.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
final_df.columns.tolist()
12.3 µs ± 27.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.head(1).columns)
163 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Простейший способ:
list(my_dataframe.columns)
как ответил Симеон Виссер... вы могли бы сделать
list(my_dataframe.columns.values)
или же
list(my_dataframe) # for less typing.
Но я думаю, что самое приятное место это:
list(my_dataframe.columns)
Это явно, в то же время не излишне долго.
Для быстрой, аккуратной визуальной проверки попробуйте это:
for col in df.columns:
print col
Это дает нам имена столбцов в списке:
list(my_dataframe.columns)
Также можно использовать другую функцию с именем tolist():
my_dataframe.columns.tolist()
Мне кажется, вопрос заслуживает дополнительного объяснения.
Как отметил @fixxxer, ответ зависит от версии pandas, которую вы используете в своем проекте. Что вы можете получить с помощью команды pd.__version__
.
Если вы по какой-то причине, как я (в Debian Jessie, я использую 0.14.1), используете более старую версию панд, чем 0.16.0, тогда вам нужно использовать:
df.keys().tolist()
потому что метод df.columns
еще не реализован.
Преимущество этого метода ключей в том, что он работает даже в более новых версиях панд, поэтому он более универсален.
n = []
for i in my_dataframe.columns:
n.append(i)
print n
Хотя решение, которое было предоставлено выше, приятно. Я также ожидал бы, что что-то вроде frame.column_names() будет функцией в пандах, но, поскольку это не так, возможно, было бы неплохо использовать следующий синтаксис. Это как-то сохраняет ощущение, что вы используете панды надлежащим образом, вызывая функцию "tolist": frame.columns.tolist()
frame.columns.tolist()
может использовать атрибуты индекса
df = pd.DataFrame({'col1' : np.random.randn(3), 'col2' : np.random.randn(3)},
index=['a', 'b', 'c'])
Это решение перечисляет все столбцы вашего объекта my_dataframe:
print(list(my_dataframe))
Попробуйте это:
list(my_dataframe.keys());