8 votes

Comment personnaliser les en-têtes et la largeur des colonnes d'un affichage DataFrame ?

En règle générale, j'aime utiliser des noms de colonnes longs et descriptifs (par ex. estimated_background_signal plutôt que juste bg ) pour DataFrame objets. Le seul inconvénient de cette préférence est que l'objet DataFrame Le formulaire d'affichage de l'entreprise a plusieurs colonnes qui sont beaucoup plus larges que leurs valeurs ne l'exigent. Par exemple :

In [10]: data.head()
     barcode estimated_background_signal inhibitor_code inhibitor_concentration
0  R00577279                         133            IRB                   0.001
1  R00577279                         189            SNZ                   0.001
2  R00577279                         101            CMY                   0.001
3  R00577279                         112            BRC                   0.001
4  R00577279                         244            ISB                   0.001

Ce serait bien si l'écran était plus étroit. Sans tenir compte des en-têtes, l'affichage le plus étroit serait :

0 R00577279 113 IRB 0.001
1 R00577279 189 SNZ 0.001
2 R00577279 101 CMY 0.001
3 R00577279 112 BRC 0.001
4 R00577279 244 ISB 0.001

...mais l'élimination totale des en-têtes n'est pas une solution entièrement satisfaisante. Une meilleure solution consisterait à rendre l'affichage suffisamment large pour permettre la présence de quelques en-têtes, qui pourraient occuper plusieurs lignes :

    barcode estim inhib inhib
            ated_ itor_ itor_
            backg code  conce
0 R00577279   113   IRB 0.001
1 R00577279   189   SNZ 0.001
2 R00577279   101   CMY 0.001
3 R00577279   112   BRC 0.001
4 R00577279   244   ISB 0.001

Il est probablement évident qu'aucune convention ne peut convenir à toutes les situations. pandas offre un moyen de personnaliser les en-têtes et les largeurs de colonne d'une DataFrame Le formulaire d'affichage de l'entreprise ?

1voto

JohnE Points 12788

C'est un peu un hack qui utilise la fonction multi-index de pandas d'une manière non standard, bien que je ne vois pas de problèmes significatifs à le faire. Bien sûr, l'utilisation d'un index multiple au lieu d'un index simple augmente la complexité.

cols = df.columns
lencols = [ int(len(c)/2) for c in cols ]

df.columns = pd.MultiIndex.from_tuples( 
                 tuple( ( c[:ln], c[ln:] ) for c, ln in zip(cols, lencols) ) )

Résultats :

         bar  estimated_bac inhibit  inhibitor_c
        code kground_signal or_code oncentration
0  R00577279            133     IRB        0.001
1  R00577279            189     SNZ        0.001
2  R00577279            101     CMY        0.001
3  R00577279            112     BRC        0.001
4  R00577279            244     ISB        0.001

Vous pourriez également envisager de créer un dictionnaire pour convertir les noms longs et courts selon les besoins :

1voto

Michael B Points 266

Il y a évidemment pd.set_option des paramètres d'affichage que vous pouvez utiliser. Si vous cherchez une réponse spécifique à pandas qui n'implique pas de modifier les paramètres d'affichage de l'ordinateur portable, pensez à ce qui suit.

df = pd.DataFrame(np.random.randn(10, 2), 
    columns=['Very Long Column Title ' + str(i) for i in range(2)])
df.style.set_table_styles([dict(selector="th",props=[('max-width', '50px')])])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X