Comment récupérer le nombre de colonnes dans une trame de données Pandas?

184

Comment récupérez-vous par programme le nombre de colonnes dans un dataframe pandas? J'espérais quelque chose comme:

df.num_columns
user1802143
la source

Réponses:

305

Ainsi:

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

len(df.columns)
3
John
la source
35
plus df.shapedonne un tuple avec (n_rows, n_columns)
mkln
3
@mkln si vous postez df.shape [1] comme réponse, j'aurais +1. C'est la meilleure façon de travailler avec numpy et mérite d'être une réponse distincte.
Phil Cooper
terminé. @PhilCooper pouvez-vous expliquer pourquoi df.shapec'est mieux? je suppose qu'il n'appelle pas une fonction mais lit simplement l'attribut de la mémoire?
mkln
113

Alternative:

df.shape[1]

( df.shape[0]est le nombre de lignes)

mkln
la source
2
+1 parce que j'aime encourager l'adressage des objets numpy et pandas avec une syntaxe de type martix. (df.shape vs len (df.columns)). À vrai dire, si vous regardez le descripteur pandas pour la forme, il appelle len (df.columns) mais les tableaux et matricies numpy les ont comme attribut. les opérations vectorisées les plus efficaces peuvent être effectuées avec des syntas python régulières par opposition aux opérations vectorisées et sont presque toujours erronées (opérations numba / jit à l'exception de cette critique)
Phil Cooper
26

Si la variable contenant le dataframe est appelée df, alors:

len(df.columns)

donne le nombre de colonnes.

Et pour ceux qui veulent le nombre de lignes:

len(df.index)

Pour un tuple contenant le nombre de lignes et de colonnes:

df.shape
multigoodverse
la source
3
Ne len(df)vous donnerait pas les lignes?
Padraic Cunningham
4
@PadraicCunningham pandas a tellement de raccourcis faciles à oublier que je préfère les ignorer et utiliser la logique principale à la place pour résoudre les choses. Vous pouvez parfois sacrifier la vitesse de traitement, mais j'apprécie mon temps de codage et la lisibilité du code plus que quelques secondes de temps de traitement. Dans ce cas particulier: si vous apprenez que le nombre de lignes peut être calculé avec len (df.index), la prochaine fois que vous aurez besoin du nombre de colonnes, il sera naturel de faire len (df.columns).
multigoodverse
0

Cela a fonctionné pour moi len (list (df)).

Tanmay Ghanekar
la source
De l'avis: Salut, cet article ne semble pas fournir une réponse de qualité à la question. Veuillez modifier votre réponse et l'améliorer, ou simplement la publier sous forme de commentaire.
sɐunıɔ ןɐ qɐp
Ne fais pas ça. Cela crée une nouvelle liste, gaspillant de la mémoire et de la vitesse.
jmmcd
0

La fonction df.info () vous donnera un résultat comme ci-dessous. Si vous utilisez la méthode read_csv de Pandas sans paramètre sep ou sep avec ",".

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
la source
0

Il existe plusieurs options pour obtenir le numéro de colonne et les informations de colonne telles que:
vérifions-les.

local_df = pd.DataFrame (np.random.randint (1,12, taille = (2,6)), colonnes = ['a', 'b', 'c', 'd', 'e', ​​'f ']) 1. local_df.shape [1] -> L'attribut Shape renvoie le tuple comme (ligne et colonnes) (0,1).

  1. local_df.info () -> La méthode info renverra des informations détaillées sur le bloc de données et ses colonnes, comme le nombre de colonnes, le type de données des colonnes, le nombre de valeurs non nulles, l'utilisation de la mémoire par le bloc de données

  2. len (local_df.columns) -> L'attribut columns renverra l'objet d'index des colonnes du bloc de données et la fonction len renverra le total des colonnes disponibles.

  3. local_df.head (0) -> la méthode head avec le paramètre 0 retournera la 1ère ligne de df qui en fait rien d'autre que l'en-tête.

En supposant que le nombre de colonnes ne dépasse pas 10. Pour le plaisir de la boucle: li_count = 0 pour x dans local_df: li_count = li_count + 1 print (li_count)

AshishSingh007
la source