Я хочу получить список заголовков столбцов от 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)
Существует встроенный метод, который является наиболее эффективным:
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!)
>>> 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
Удивлен, что я до сих пор не видел это, поэтому я просто оставлю это здесь.
[* 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)
следует использовать только в качестве краткой альтернативы вышеупомянутым методам.
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)
Для исследования данных в ноутбуке IPython мой предпочтительный способ заключается в следующем:
sorted(df)
Который создаст легко читаемый алфавитно упорядоченный список.
В коде я нахожу это более явным
df.columns
Потому что это говорит другим, читающим ваш код, что вы делаете.
%% 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 циклов каждый)
в ответ Симеон Виссер...Вы могли бы сделать
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), используя более старую версию Pandas, чем 0.16.0, то вам нужно использовать:
df.keys () .tolist ()
, потому что метод df.columns
еще не реализован.
Преимущество этого метода ключей в том, что он работает даже в более новой версии панд, поэтому он более универсален.
Хотя решение, которое было предоставлено выше, приятно. Я также ожидал бы, что что-то вроде frame.column_names () будет функцией в pandas, но, поскольку это не так, возможно, было бы неплохо использовать следующий синтаксис. Это каким-то образом сохраняет ощущение, что вы используете панды надлежащим образом, вызывая функцию «толист»: frame.columns.tolist ()
frame.columns.tolist()
Это решение перечисляет все столбцы вашего объекта my_dataframe:
print(list(my_dataframe))