Получить список из заголовков столбцов pandas DataFrame
Я хочу получить список заголовков столбцов из фрейма данных pandas. Фрейм данных будет поступать от пользователя, поэтому я не буду знать, сколько столбцов будет или как они будут называться.
например, если мне дают такой фрейм данных:
>>> 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]
17 ответов
Вы можете получить значения в виде списка, выполнив:
list(my_dataframe.columns.values)
Также вы можете просто использовать:
list(my_dataframe)
существует встроенный метод, который является наиболее эффективным:
my_dataframe.columns.values.tolist()
.columns
возвращает Index
, .columns.values
возвращает array
и это имеет вспомогательную функцию, чтобы возвратить list
.
редактировать
для тех, кто ненавидит печатать это, вероятно, самый короткий метод:
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']
Это интересно, но 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
A таблицы данных следует dict-подобному соглашению итерации по "ключам" объектов.
my_dataframe.keys()
создать список ключей / столбцов-метод объекта to_list()
и подходящие для Python способ
my_dataframe.keys().to_list()
list(my_dataframe.keys())
основные итерации на фрейме данных возвращает метки столбцов
[column for column in my_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
потому что он говорит другим, читающим ваш код, что вы делаете.
Я чувствую, что вопрос заслуживает дополнительного разъяснения.
как отметил @fixxxer, ответ зависит от версии pandas, которую вы используете в своем проекте. Который вы можете получить с .
Если вы по какой-то причине похожи на меня (в debian jessie я использую 0.14.1), используя более старую версию pandas, чем 0.16.0, вам нужно использовать:
df.keys().tolist()
потому что нет df.columns
способ реализованы.
преимущество этого метода ключей в том, что он работает даже в более новой версии pandas, поэтому она более универсальна.
как ответил Симеон Виссер...вы могли бы сделать
list(my_dataframe.columns.values)
или
list(my_dataframe) # for less typing.
но я думаю, что самое сладкое место-это:
list(my_dataframe.columns)
это явно, в то же время не излишне долго.
это дает нам имена столбцов в списке:
list(my_dataframe.columns)
можно также использовать другую функцию, называемую tolist ():
my_dataframe.columns.tolist()
можно использовать атрибуты индекса
df = pd.DataFrame({'col1' : np.random.randn(3), 'col2' : np.random.randn(3)},
index=['a', 'b', 'c'])