Comment puis-je imprimer un fichier de données pandas) sous forme de tableau textuel Nice, comme ci-dessous?
+------------+---------+-------------+
| column_one | col_two | column_3 |
+------------+---------+-------------+
| 0 | 0.0001 | ABCD |
| 1 | 1e-005 | ABCD |
| 2 | 1e-006 | long string |
| 3 | 1e-007 | ABCD |
+------------+---------+-------------+
Je viens de trouver un excellent outil pour ce besoin, il s'appelle tabulate .
Il imprime des données tabulaires et fonctionne avec DataFrame
.
from tabulate import tabulate
import pandas as pd
df = pd.DataFrame({'col_two' : [0.0001, 1e-005 , 1e-006, 1e-007],
'column_3' : ['ABCD', 'ABCD', 'long string', 'ABCD']})
print(tabulate(df, headers='keys', tablefmt='psql'))
+----+-----------+-------------+
| | col_two | column_3 |
|----+-----------+-------------|
| 0 | 0.0001 | ABCD |
| 1 | 1e-05 | ABCD |
| 2 | 1e-06 | long string |
| 3 | 1e-07 | ABCD |
+----+-----------+-------------+
Remarque:
Pour supprimer les index de ligne pour tous les types de données, transmettez
showindex="never"
oushowindex=False
.
Vous pouvez utiliser prettytable pour rendre le tableau sous forme de texte. L'astuce consiste à convertir le data_frame en un fichier csv en mémoire et à le faire lire par prettytable. Voici le code:
from StringIO import StringIO
import prettytable
output = StringIO()
data_frame.to_csv(output)
output.seek(0)
pt = prettytable.from_csv(output)
print pt
J'ai utilisé la réponse d'Ofer pendant un moment et je l'ai trouvée excellente dans la plupart des cas. Malheureusement, en raison d'incohérences entre from_csv) de --- (pandas's to_csv et prettytable , j'ai dû utiliser prettytable d'une manière différente.
Un cas d'échec est un cadre de données contenant des virgules:
pd.DataFrame({'A': [1, 2], 'B': ['a,', 'b']})
Prettytable pose une erreur de forme:
Error: Could not determine delimiter
La fonction suivante gère ce cas:
def format_for_print(df):
table = PrettyTable([''] + list(df.columns))
for row in df.itertuples():
table.add_row(row)
return str(table)
Si vous ne vous souciez pas de l'index, utilisez:
def format_for_print2(df):
table = PrettyTable(list(df.columns))
for row in df.itertuples():
table.add_row(row[1:])
return str(table)
Une approche simple consiste à afficher en HTML, qui les pandas sortent de la boîte :
df.to_html('temp.html')
Si vous êtes dans le bloc-notes Jupyter, vous pouvez exécuter le code suivant pour afficher de manière interactive le cadre de données dans un tableau bien formaté.
Cette réponse s'appuie sur la réponse to_html ('temp.html') ci-dessus, mais au lieu de créer un fichier, la table bien formatée s'affiche directement dans le bloc-notes:
from IPython.display import display, HTML
display(HTML(df.to_html()))
Le crédit pour ce code est dû à l'exemple suivant: Afficher la trame DataFrame sous forme de tableau dans le bloc-notes iPython
Pour donner suite à la réponse de Mark, si vous utilisez pas utilisez Jupyter pour une raison quelconque, par exemple. vous voulez faire des tests rapides sur la console, vous pouvez utiliser le DataFrame.to_string
méthode, qui fonctionne à partir de - au moins - Pandas 0.12 (2014).
import pandas as pd
matrix = [(1, 23, 45), (789, 1, 23), (45, 678, 90)]
df = pd.DataFrame(matrix, columns=list('abc'))
print(df.to_string())
# outputs:
# a b c
# 0 1 23 45
# 1 789 1 23
# 2 45 678 90