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)
où 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.
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).
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)
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)
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()
vous pouvez également utiliser DataFrame.head(x)
/.tail(x)
pour afficher les premières/dernières x lignes du DataFrame.
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)
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)