Comment afficher tous les noms de colonnes sur pandas dataframe?


115

J'ai un dataframe composé de centaines de colonnes, et j'ai besoin de voir tous les noms de colonnes.

Ce que j'ai fait:

In[37]:
data_all2.columns

La sortie est:

Out[37]:
Index(['customer_id', 'incoming', 'outgoing', 'awan', 'bank', 'family', 'food',
       'government', 'internet', 'isipulsa',
       ...
       'overdue_3months_feature78', 'overdue_3months_feature79',
       'overdue_3months_feature80', 'overdue_3months_feature81',
       'overdue_3months_feature82', 'overdue_3months_feature83',
       'overdue_3months_feature84', 'overdue_3months_feature85',
       'overdue_3months_feature86', 'loan_overdue_3months_total_y'],
      dtype='object', length=102)

Comment afficher toutes les colonnes au lieu d'une liste tronquée?

Réponses:


176

Vous pouvez définir globalement les options d'impression. Je pense que cela devrait fonctionner:

Méthode 1:

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

Méthode 2:

pd.options.display.max_columns = None
pd.options.display.max_rows = None

Cela vous permettra de voir tous les noms de colonnes et toutes les lignes lorsque vous le faites .head(). Aucun nom de colonne ne sera tronqué.

Si vous souhaitez voir uniquement les noms de colonnes, vous pouvez faire: cols = df.columns.tolist()


2
La modification de ces options d'affichage des pandas ne répond PAS à la question; ces paramètres n'empêchent pas data_all2.columns d'arrêter de tronquer la sortie. Je suggère que le demandeur de question @ Nabih-Bawazir désélectionne ceci comme réponse.
EEE

3
@EEE Non, cela répond à la question. Je viens de l'essayer, il affiche toutes les colonnes au lieu d'une liste tronquée. Il n'a pas dit champ tronqué, il a dit liste de colonnes.
rjurney

3
Ahh, tu as raison. J'avais tort. Merci, @rjurney. Et désolé YOLO. Je faisais df.columns au lieu de df.head ()! Dois-je supprimer mon commentaire précédent incorrect?
EEE

Ouais je pense que oui.
rjurney

il est préférable de définir une valeur finie comme 500, sinon il faudra une éternité pour s'exécuter si vous imprimez une trame de données volumineuses
Thomas G.

42

Pour obtenir tous les noms de colonne d'un DataFrame, df_datadans cet exemple, il vous suffit d'utiliser la commande df_data.columns.values. Cela vous montrera une liste avec tous les noms de colonnes de votre Dataframe

Code:

df_data=pd.read_csv('../input/data.csv')
print(df_data.columns.values)

Production:

['PassengerId' 'Survived' 'Pclass' 'Name' 'Sex' 'Age' 'SibSp' 'Parch' 'Ticket' 'Fare' 'Cabin' 'Embarked']

C'est la vraie réponse à cette question, merci @ pink.slash
Interlooper

Si je souhaite également voir les numéros des colonnes, est-ce possible? Mon df a 200 colonnes et j'aimerais en utiliser une fraction, et je pensais que je pourrais utiliser les nombres au lieu d'écrire le nom de chaque colonne.
Mactilda

9

Dans la console interactive, c'est facile à faire:

data_all2.columns.tolist()

Ou ceci dans un script:

print(data_all2.columns.tolist())

6

Ça fera l'affaire. Notez l'utilisation de display()au lieu d'imprimer.

with pd.option_context('display.max_rows', 5, 'display.max_columns', None): 
    display(my_df)

ÉDITER:

L'utilisation de displayest obligatoire car les pd.option_contextparamètres s'appliquent uniquement à displayet non à print.


J'aime le withmot - clé pour appliquer l'option uniquement au bloc ci-dessous. Cependant, cela fonctionne bien avec print(). Pourquoi aurais-je besoin d'utiliser à la display()place de print()?
Vincent Agami le

@VincentAgami L'utilisation de l'affichage est requise car les paramètres de pd.option_context s'appliquent uniquement à l'affichage et non à l'impression. J'ai mis à jour la réponse pour inclure ces informations.
nico le

3

Ce qui a fonctionné pour moi était le suivant:

pd.options.display.max_seq_items = None

Vous pouvez également le définir sur un entier supérieur à votre nombre de colonnes.


2

Pour obtenir tous les noms de colonnes, vous pouvez parcourir le data_all2.columns.

columns = data_all2.columns
for col in columns:
    print col

Vous obtiendrez tous les noms de colonnes. Ou vous pouvez stocker tous les noms de colonne dans une autre variable de liste, puis imprimer la liste.


1

Si vous voulez juste voir toutes les colonnes, vous pouvez faire quelque chose de ce genre comme solution rapide

cols = data_all2.columns

maintenant cols se comportera comme une variable itérative qui peut être indexée. par exemple

cols[11:20]

1

Une solution rapide et sale serait de le convertir en chaîne

print('\t'.join(data_all2.columns))

les ferait tous être imprimés séparés par des tabulations Bien sûr, notez qu'avec 102 noms, tous assez longs, ce sera un peu difficile à lire



1

tu peux essayer ça

pd.pandas.set_option('display.max_columns', None)

1

Ce n'est pas une réponse conventionnelle, mais je suppose que vous pouvez transposer le dataframe pour regarder les lignes au lieu des colonnes. J'utilise ceci parce que je trouve que regarder les lignes est plus `` intuitif '' que regarder les colonnes:

data_all2.T

Cela devrait vous permettre de visualiser toutes les lignes. Cette action n'est pas permanente , elle vous permet simplement de visualiser la version transposée du dataframe.

Si les lignes sont toujours tronquées, utilisez simplement print(data_all2.T)pour tout afficher.


Ce n'est pas une réponse conventionnelle, mais je suppose que vous pouvez transposer le dataframe pour regarder les lignes au lieu des colonnes. Tout ce qu'ils veulent, ce sont les noms de colonnes, non? Si les lignes sont toujours tronquées, utilisez simplement print (data_all2.T) pour tout afficher. Comment l'impression du résultat résoudrait-elle le problème? Vous ne l'imprimez pas déjà de toute façon?
AMC

1

Le moyen le plus simple que j'ai trouvé est juste

list(df.columns)

Personnellement, je ne voudrais pas changer les globaux, ce n'est pas si souvent que je veux voir tous les noms de colonnes.


0

C'est mon chemin. Je n'essaye jamais de cent colonnes. Mais je pense que ça marche

your_dataframe.info()

0

Je sais que c'est une répétition mais je finis toujours par copier-coller et modifier la réponse de YOLO:

pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.