python - recorrer - Impresión bonita de una serie completa de Pandas/Marco de datos
recorrer data frame pandas (9)
Trabajo mucho con Series y DataFrames en el terminal. El valor predeterminado __repr__
para una Serie devuelve una muestra reducida, con algunos valores de cabeza y cola, pero el resto falta.
¿Existe una forma integrada de imprimir de manera bonita toda la serie / marco de datos? Idealmente, admitiría una alineación adecuada, tal vez bordes entre columnas, e incluso códigos de colores para las diferentes columnas.
Claro, si esto surge mucho, haz una función como esta. Incluso puede configurarlo para que se cargue cada vez que inicie IPython: https://ipython.org/ipython-doc/1/config/overview.html
def print_full(x):
pd.set_option(''display.max_rows'', len(x))
print(x)
pd.reset_option(''display.max_rows'')
En cuanto a la coloración, ser demasiado elaborado con los colores me parece contraproducente, pero estoy de acuerdo en que algo como el bootstrap''s .table-striped
sería bueno. Siempre se puede crear un problema para sugerir esta característica.
Después de importar pandas, como alternativa al uso del administrador de contexto, configure estas pandas.pydata.org/pandas-docs/stable/options.html para mostrar los marcos de datos completos:
pd.set_option(''display.max_columns'', None) # or 1000
pd.set_option(''display.max_rows'', None) # or 1000
pd.set_option(''display.max_colwidth'', -1) # or 199
Para la lista completa de opciones útiles, vea:
pd.describe_option(''display'')
Esta respuesta es una variación de la respuesta anterior por lucidyan . Hace que el código sea más legible al evitar el uso de set_option
.
Después de importar pandas, como alternativa al uso del administrador de contexto, configure estas pandas.pydata.org/pandas-docs/stable/options.html para mostrar grandes marcos de datos:
def set_pandas_options() -> None:
pd.options.display.max_columns = 1000
pd.options.display.max_rows = 1000
pd.options.display.max_colwidth = 199
pd.options.display.width = None
# pd.options.display.precision = 2 # set as needed
set_pandas_options()
Después de esto, puede usar la display(df)
o solo df
si usa una notebook, de lo contrario print(df)
.
No hay necesidad de hackear la configuración. Hay una forma sencilla:
print(df.to_string())
Prueba esto
pd.set_option(''display.height'',1000)
pd.set_option(''display.max_rows'',500)
pd.set_option(''display.max_columns'',500)
pd.set_option(''display.width'',1000)
Puede lograr esto utilizando el método de abajo. acaba de pasar el total no. de columnas presentes en el marco de datos como arg para
''display.max_columns''
Por ejemplo:
df= DataFrame(..)
with pd.option_context(''display.max_rows'', None, ''display.max_columns'', df.shape[1]):
print(df)
Si está utilizando Ipython Notebook (Jupyter). Puedes usar HTML
from IPython.core.display import HTML
display(HTML(df.to_html()))
También puede usar el option_context
, con una o más opciones:
with pd.option_context(''display.max_rows'', None, ''display.max_columns'', None):
print(df)
Esto devolverá automáticamente las opciones a sus valores predeterminados.
Si está trabajando en jupyter-notebook, usar la display
lugar de print
usará la lógica de visualización rica en jupyter.
Utilice el paquete tabular:
pip install tabulate
Y considere el siguiente ejemplo de uso:
import pandas as pd
from io import StringIO
from tabulate import tabulate
c = """Chromosome Start End
chr1 3 6
chr1 5 7
chr1 8 9"""
df = pd.read_table(StringIO(c), sep="/s+", header=0)
print(tabulate(df, headers=''keys'', tablefmt=''psql''))
+----+--------------+---------+-------+
| | Chromosome | Start | End |
|----+--------------+---------+-------|
| 0 | chr1 | 3 | 6 |
| 1 | chr1 | 5 | 7 |
| 2 | chr1 | 8 | 9 |
+----+--------------+---------+-------+