¿Cómo recupero la cantidad de columnas en un marco de datos de Pandas?

6 minutos de lectura

avatar de usuario
usuario1802143

¿Cómo se recupera mediante programación el número de columnas en un marco de datos de pandas? Esperaba algo como:

df.num_columns

  • Estoy buscando una solución que tenga en cuenta también las columnas que se convierten en (múltiples) índices después de la operación de agrupación. me di cuenta de len(df.axes[0].names)+df.shape[1] pero parece lejos de ser óptimo. ¿Algunas ideas? Ninguna de las respuestas existentes aborda eso ahora.

    – jangorecki

    21 de enero de 2021 a las 17:09


  • @jangorecki Sin embargo, eso no está relacionado en absoluto con esta pregunta. Si las cosas están en el Índice de un DataFrame, son no considerado una columna. Si bien esto puede parecer una distinción un tanto arbitraria, pandas trata los valores de índice y la serie de columnas muy diferente para ciertas manipulaciones. De todos modos, puede evitar la creación de un MultiIndex con as_index=False cuando te agrupas.

    – Alollz

    22 de enero de 2021 a las 20:12


  • @ALollz el hecho de que no se consideren una columna es solo información específica de pandas, los ingenieros que provienen de SQL, R y otras tecnologías esperarán que las columnas de agrupación sean columnas, no un atributo.

    – jangorecki

    23 de enero de 2021 a las 10:37

  • @jangorecki Una manera fácil sería len(df.reset_index().columns) como reset_index convertirá todos los índices en columnas. Pero esta es realmente una pregunta distinta como señala @Aloltz. Recomiendo simplemente hacer una nueva pregunta con un conjunto de datos de muestra adecuado y dar la recompensa aquí a la respuesta aceptada.

    – JuanE

    23 de enero de 2021 a las 16:19

avatar de usuario
John

Al igual que:

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

len(df.columns)
3

  • más df.shape da una tupla con (n_filas, n_columnas)

    – mkln

    30 de noviembre de 2013 a las 9:11

  • @mkln si publica df.shape[1] como respuesta, haría +1. Esta es la mejor manera de trabajar con numpy y merece ser una respuesta separada.

    –Phil Cooper

    30 de noviembre de 2013 a las 16:59

  • hecho. @PhilCooper quizás podrías explicar por qué df.shape ¿es mejor? Supongo que no llama a una función sino que solo lee el atributo de la memoria.

    – mkln

    30 de noviembre de 2013 a las 18:59

avatar de usuario
mkln

Alternativa:

df.shape[1]

(df.shape[0] es el número de filas)

  • +1 porque me gusta alentar el direccionamiento de objetos numpy y pandas con sintaxis de tipo martix. (df.forma vs len(df.columnas)). A decir verdad, si observa el descriptor de pandas para la forma, llama a len (df.columns) pero las matrices y matrices numpy las tienen como un atributo. las operaciones vectorizadas más eficientes se pueden realizar con python syntas regulares en lugar de operaciones vectorizadas y casi siempre son incorrectas (operaciones numba/jit exceptuadas de esa crítica)

    –Phil Cooper

    30 de noviembre de 2013 a las 23:33

Si la variable que contiene el marco de datos se llama df, entonces:

len(df.columns)

da el número de columnas.

Y para los que quieren el número de filas:

len(df.index)

Para una tupla que contiene el número de filas y columnas:

df.shape

  • no lo haría len(df) darte las filas?

    – Padraic Cunningham

    20 de diciembre de 2015 a las 1:15

  • @PadraicCunningham pandas tiene tantos atajos que son fáciles de olvidar, así que prefiero ignorarlos y usar la lógica principal para resolver las cosas. Puede sacrificar la velocidad de procesamiento a veces, pero valoro mi tiempo de codificación y la legibilidad del código más que unos pocos segundos de tiempo de procesamiento. En este caso particular: si aprende que el número de filas se puede calcular con len(df.index), la próxima vez que necesite el número de columnas, es natural hacerlo con len(df.columns).

    – multibuenverso

    20 de diciembre de 2015 a las 9:31

avatar de usuario
mowsy

Sorprendido, no he visto esto todavía, así que sin más preámbulos, aquí está:

df.columns.size

La función df.info() le dará un resultado similar al siguiente. Si está utilizando el método read_csv de Pandas sin el parámetro sep o sep con “,”.

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

avatar de usuario
AshishSingh007

Hay varias opciones para obtener el número de columna y la información de la columna, como:
vamos a comprobarlos.

local_df = pd.DataFrame(np.random.randint(1,12,size=(2,6)),columns =[‘a’,’b’,’c’,’d’,’e’,’f’]) 1. local_df.forma[1] –> El atributo de forma devuelve la tupla como (fila y columnas) (0,1).

  1. local_df.info() –> info El método devolverá información detallada sobre el marco de datos y sus columnas, como el recuento de columnas, el tipo de datos de las columnas, el recuento de valores no nulos, el uso de memoria por parte del marco de datos

  2. len(local_df.columns) –> el atributo de columnas devolverá el objeto de índice de las columnas del marco de datos y la función len devolverá el total de columnas disponibles.

  3. local_df.head(0) –> el método head con el parámetro 0 devolverá la primera fila de df, que en realidad no es más que un encabezado.

Suponiendo que el número de columnas no supere las 10. Para diversión de bucle: li_count =0 para x en local_df: li_count =li_count + 1 print(li_count)

avatar de usuario
Cameron Riddell

Para incluir el número de “columnas” de índice de fila en su forma total, personalmente sumaría el número de columnas df.columns.size con el atributo pd.Index.nlevels/pd.MultiIndex.nlevels:

Configurar datos ficticios

import pandas as pd

flat_index = pd.Index([0, 1, 2])
multi_index = pd.MultiIndex.from_tuples([("a", 1), ("a", 2), ("b", 1), names=["letter", "id"])

columns = ["cat", "dog", "fish"]

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_df = pd.DataFrame(data, index=flat_index, columns=columns)
multi_df = pd.DataFrame(data, index=multi_index, columns=columns)

# Show data
# -----------------
# 3 columns, 4 including the index
print(flat_df)
    cat  dog  fish
id                
0     1    2     3
1     4    5     6
2     7    8     9

# -----------------
# 3 columns, 5 including the index
print(multi_df)
           cat  dog  fish
letter id                
a      1     1    2     3
       2     4    5     6
b      1     7    8     9

Escribiendo nuestro proceso como una función:

def total_ncols(df, include_index=False):
    ncols = df.columns.size
    if include_index is True:
        ncols += df.index.nlevels
    return ncols

print("Ignore the index:")
print(total_ncols(flat_df), total_ncols(multi_df))

print("Include the index:")
print(total_ncols(flat_df, include_index=True), total_ncols(multi_df, include_index=True))

Esto imprime:

Ignore the index:
3 3

Include the index:
4 5

Si solo desea incluir el número de índices si el índice es un pd.MultiIndexentonces puedes lanzar un isinstance comprobar en la función definida.

Como alternativa, puede utilizar df.reset_index().columns.size para lograr el mismo resultado, pero esto no tendrá el mismo rendimiento ya que estamos insertando temporalmente nuevas columnas en el índice y creando un nuevo índice antes de obtener el número de columnas.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad