Как получить количество столбцов во фрейме данных Pandas?

184

Как программно получить количество столбцов в кадре данных pandas? Я надеялся на что-то вроде:

df.num_columns
user1802143
источник

Ответы:

305

Вот так:

import pandas as pd
df = pd.DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})

len(df.columns)
3
Джон
источник
35
плюс df.shapeдает кортеж с (n_rows, n_columns)
mkln
3
@mkln, если вы отправите df.shape [1] в качестве ответа, я бы +1. Это лучший способ работать с NumPy и заслуживает отдельного ответа.
Фил Купер
сделано. @PhilCooper, может быть, вы могли бы объяснить, почему df.shapeлучше? я думаю, что он не вызывает функцию, а просто читает атрибут из памяти?
mkln
113

Альтернатива:

df.shape[1]

( df.shape[0]количество строк)

mkln
источник
2
+1, потому что мне нравится поощрять адресацию объектов numpy и pandas с синтаксисом типа martix. (df.shape vs len (df.columns)). По правде говоря, если вы посмотрите на дескриптор pandas для формы, он вызывает len (df.columns), но у пустых массивов и матриц есть их как атрибут. наиболее эффективные векторизованные операции могут быть выполнены с обычными синтезаторами Python, в отличие от векторизованных операций, и почти всегда они ошибочны (операции numba / jit исключены из этой критики)
Фил Купер
26

Если переменная, содержащая фрейм данных, называется df, то:

len(df.columns)

дает количество столбцов.

А для тех, кто хочет количество рядов:

len(df.index)

Для кортежа, содержащего количество строк и столбцов:

df.shape
multigoodverse
источник
3
Не len(df)дали бы вам строки?
Падрайк Каннингем
4
@PadraicCunningham pandas имеет так много ярлыков, которые легко забыть, поэтому я предпочитаю игнорировать их и вместо этого использовать основную логику для решения проблем. Вы можете иногда жертвовать скоростью обработки, но я ценю свое время кодирования и читаемость кода больше, чем несколько секунд времени обработки. В данном конкретном случае: если вы узнаете, что количество строк можно рассчитать с помощью len (df.index), в следующий раз вам понадобится количество столбцов, которое будет естественным для len (df.columns).
MultiGoodverse
0

Это сработало для меня Лен (список (DF)).

Танмай Ганекар
источник
Из обзора: Привет, этот пост не дает качественного ответа на вопрос. Пожалуйста, либо отредактируйте свой ответ и улучшите его, либо просто опубликуйте как комментарий.
sɐunıɔ ןɐ qɐp
Не делай этого. Создает новый список, тратит память и скорость.
JMMCD
0

Функция df.info () выдаст вам результат, подобный приведенному ниже. Если вы используете метод Pandas read_csv без параметра sep или sep с помощью ",".

raw_data = pd.read_csv("a1:\aa2/aaa3/data.csv")
raw_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5144 entries, 0 to 5143
Columns: 145 entries, R_fighter to R_age
AshishSingh007
источник
0

Существует несколько вариантов получения номера столбца и информации о столбце, например:
давайте проверим их.

local_df = pd.DataFrame (np.random.randint (1,12, размер = (2,6)), столбцы = ['a', 'b', 'c', 'd', 'e', ​​'f ']) 1. local_df.shape [1] -> атрибут Shape возвращает кортеж в виде (строки и столбцы) (0,1).

  1. local_df.info () -> метод info будет возвращать подробную информацию о фрейме данных и его столбцах, таких как количество столбцов, тип данных столбцов, количество ненулевых значений, использование памяти фреймом данных

  2. len (local_df.columns) -> атрибут столбцов возвращает объект индекса столбцов фрейма данных, а функция len возвращает общее количество доступных столбцов.

  3. local_df.head (0) -> метод head с параметром 0 вернет 1-ую строку df, которая на самом деле не что иное, как заголовок.

Предполагается, что количество столбцов не более 10. Для забавы цикла: li_count = 0 для x в local_df: li_count = li_count + 1 print (li_count)

AshishSingh007
источник