Получить список из заголовков столбцов 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.EDIT
для тех, кто ненавидит печатать это, вероятно, самый короткий метод:
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!)
его становится еще проще (по панд 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 DataFrame следует 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метод еще не реализован.преимущество этого метода ключей заключается в том, что он работает даже в более новой версии панд, поэтому она более универсальна.
как ответил Симеон Виссер...вы могли бы сделать
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'])
Comments