web-dev-qa-db-fra.com

Exporter des données de toutes les colonnes d'un cadre de données dans pandas

J'ai un fichier csv nommé params.csv. J'ai ouvert ipython qtconsole et créé un pandas dataframe en utilisant:

import pandas
paramdata = pandas.read_csv('params.csv', names=paramnames)

paramnames est une liste python d'objets chaîne. Exemple de paramnames (la longueur de la liste actuelle est de 22):

paramnames = ["id",
"fc",
"mc",
"markup",
"asplevel",
"aspreview",
"reviewpd"]

À l'invite ipython, si je tape paramdata et que j'appuie sur Entrée, je ne reçois pas le cadre de données avec les colonnes et les valeurs comme indiqué dans les exemples de site Web de Pandas . Au lieu de cela, je reçois des informations sur le cadre de données. Je reçois:

In[35]: paramdata
Out[35]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 59 entries, 0 to 58
Data columns:
id                    59  non-null values
fc                    59  non-null values
mc                    59  non-null values
markup                59  non-null values
asplevel              59  non-null values
aspreview             59  non-null values
reviewpd              59  non-null values

Si je tape paramdata['mc'] alors j'obtiens les valeurs attendues pour la colonne mc. J'ai deux questions:

(1) Dans les exemples du site Web pandas (voir, par exemple, le résultat de df ici: http://pandas.sourceforge.net/indexing.html# additional-column-access ) en tapant le nom de la structure de données, vous obtenez les données réelles. Pourquoi est-ce que je reçois des informations sur le cadre de données, comme indiqué ci-dessus, plutôt que sur les données réelles? Dois-je définir des options de sortie quelque part?

(2) Comment sortir toutes les colonnes du cadre de données à l’écran sans avoir à taper leur nom, c’est-à-dire sans avoir à taper quelque chose comme paramdata[['id','fc','mc']].

J'utilise pandas version 0.8.

Je vous remercie.

94
Curious2learn

Il y a trop de données à afficher à l'écran. Par conséquent, un résumé est affiché.

Si vous voulez quand même sortir les données (elles ne tiendront probablement pas sur un écran et ne sembleront pas très bien):

print paramdata.values

convertit le cadre de données en sa représentation matricielle numpy-array.

paramdata.columns

stocke les noms de colonne respectifs et

paramdata.index

stocke l'index respectif (noms de lignes).

38
eumiro

Utilisation:

pandas.set_option('display.max_columns', 7)

Ceci forcera Pandas à afficher les 7 colonnes que vous avez. Ou plus généralement:

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

ce qui le forcera à afficher un nombre quelconque de colonnes.

Explication: la valeur par défaut de max_columns est 0, ce qui indique à Pandas d'afficher le tableau uniquement si toutes les colonnes peuvent être insérées dans la largeur de votre console.

Alternativement, vous pouvez changer la largeur de la console (en caractères) de la valeur par défaut de 80 en utilisant par exemple:

pandas.set_option('display.width', 200)
246
Yariv

Je sais que c’est une vieille question, mais je viens de vivre un problème similaire et je pense que ce que j’aurais fait fonctionnerait aussi pour vous.

J'ai utilisé la méthode to_csv () et écrit à stdout:

import sys

paramdata.to_csv(sys.stdout)

Cela devrait vider l'intégralité du cadre de données, qu'il soit bien imprimable ou non, et vous pouvez utiliser les paramètres to_csv pour configurer les séparateurs de colonnes, que l'index soit imprimé, etc.

Edit: Il est maintenant possible d’utiliser None comme cible de .to_csv() avec un effet similaire, ce qui est sans doute beaucoup plus joli:

paramdata.to_csv(None)
24
user2428107

Dans ipython, je l’utilise pour imprimer une partie du cadre de données qui fonctionne assez bien (affiche les 100 premières lignes):

print paramdata.head(100).to_string()
18
Tomas Olsson

vous pouvez également utiliser DataFrame.head(x)/.tail(x) pour afficher les premières/dernières x lignes du DataFrame.

9
K Raphael

J'arrive de python à partir de R et la fonction head() de R enveloppe les lignes de manière très pratique pour afficher des données:

> head(cbind(mtcars, mtcars, mtcars))
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb  mpg cyl
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 21.0   6
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 21.0   6
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 22.8   4
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 21.4   6
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 18.7   8
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 18.1   6
                  disp  hp drat    wt  qsec vs am gear carb  mpg cyl disp  hp
Mazda RX4          160 110 3.90 2.620 16.46  0  1    4    4 21.0   6  160 110
Mazda RX4 Wag      160 110 3.90 2.875 17.02  0  1    4    4 21.0   6  160 110
Datsun 710         108  93 3.85 2.320 18.61  1  1    4    1 22.8   4  108  93
Hornet 4 Drive     258 110 3.08 3.215 19.44  1  0    3    1 21.4   6  258 110
Hornet Sportabout  360 175 3.15 3.440 17.02  0  0    3    2 18.7   8  360 175
Valiant            225 105 2.76 3.460 20.22  1  0    3    1 18.1   6  225 105
                  drat    wt  qsec vs am gear carb
Mazda RX4         3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     3.90 2.875 17.02  0  1    4    4
Datsun 710        3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 3.15 3.440 17.02  0  0    3    2
Valiant           2.76 3.460 20.22  1  0    3    1

J'ai développé la petite fonction suivante python pour imiter cette fonctionnalité:

def rhead(x, nrow = 6, ncol = 4):
    pd.set_option('display.expand_frame_repr', False)
    seq = np.arange(0, len(x.columns), ncol)
    for i in seq:
        print(x.loc[range(0, nrow), x.columns[range(i, min(i+ncol, len(x.columns)))]])
    pd.set_option('display.expand_frame_repr', True)

(cela dépend de pandas et de numpy, évidemment)

5
generic_user

vous pouvez utiliser la syntaxe de découpage en séquence i.e

paramdata[:5] # first five records
paramdata[-5:] # last five records
paramdata[:] # all records

parfois, la trame de données peut ne pas tenir dans la mémoire tampon d'écran, auquel cas il vaut probablement mieux imprimer un petit sous-ensemble ou l'exporter vers autre chose, tracer ou (csv à nouveau)

0
G Garcia