python - recorrer - tablas con pandas
Pandas de Python, ¿cómo ampliar la pantalla de salida para ver más columnas? (11)
¿Hay alguna manera de ampliar la visualización de la salida en modo interactivo o de ejecución de script?
Específicamente, estoy usando la función describe () en un dataframe
Pandas. Cuando el dataframe
tiene 5 columnas (etiquetas) de ancho, obtengo las estadísticas descriptivas que deseo. Sin embargo, si el dataframe
tiene más columnas, las estadísticas se suprimen y se devuelve algo como esto:
>> Index: 8 entries, count to max
>> Data columns:
>> x1 8 non-null values
>> x2 8 non-null values
>> x3 8 non-null values
>> x4 8 non-null values
>> x5 8 non-null values
>> x6 8 non-null values
>> x7 8 non-null values
El valor "8" se da si hay 6 o 7 columnas. ¿A qué se refiere el "8"?
Ya he intentado arrastrar la ventana IDLE más grande, así como el aumento de las opciones de ancho "Configurar IDLE", en vano.
Mi propósito al usar Pandas y describe () es evitar usar un segundo programa como STATA para realizar una investigación y manipulación de datos básicos.
Python / IDLE 2.7.3
Pandas 0.8.1
Notepad ++ 6.1.4 (UNICODE)
Windows Vista SP2
Como mentioned @bmu, pandas detecta automáticamente (de manera predeterminada) el tamaño del área de visualización, se usará una vista de resumen cuando la reproducción de un objeto no se ajuste a la visualización. Usted mencionó cambiar el tamaño de la ventana IDLE, sin efecto. Si print df.describe().to_string()
¿cabe en la ventana IDLE?
El tamaño del terminal está determinado por pandas.util.terminal.get_terminal_size()
, esto devuelve una tupla que contiene el (width, height)
de la pantalla. ¿La salida coincide con el tamaño de su ventana IDLE? Puede haber un problema (hubo uno antes al ejecutar un terminal en emacs).
Tenga en cuenta que es posible omitir la detección automática, pandas.set_printoptions(max_rows=200, max_columns=10)
nunca cambiará a vista de resumen si el número de filas, las columnas no excede los límites dados.
Actualización: Pandas 0.11.0 en adelante
pandas.set_printoptions(...)
está en desuso. En su lugar, utilice pandas.set_option
. Me gusta:
import pandas as pd
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)
Aquí está la ayuda para set_option
:
set_option(pat,value) - Sets the value of the specified option Available options: display.[chop_threshold, colheader_justify, column_space, date_dayfirst, date_yearfirst, encoding, expand_frame_repr, float_format, height, line_width, max_columns, max_colwidth, max_info_columns, max_info_rows, max_rows, max_seq_items, mpl_style, multi_sparse, notebook_repr_html, pprint_nest_depth, precision, width] mode.[sim_interactive, use_inf_as_null] Parameters ---------- pat - str/regexp which should match a single option. Note: partial matches are supported for convenience, but unless you use the full option name (e.g. x.y.z.option_name), your code may break in future versions if new options with similar names are introduced. value - new value of option. Returns ------- None Raises ------ KeyError if no such option exists display.chop_threshold: [default: None] [currently: None] : float or None if set to a float value, all float values smaller then the given threshold will be displayed as exactly 0 by repr and friends. display.colheader_justify: [default: right] [currently: right] : ''left''/''right'' Controls the justification of column headers. used by DataFrameFormatter. display.column_space: [default: 12] [currently: 12]No description available. display.date_dayfirst: [default: False] [currently: False] : boolean When True, prints and parses dates with the day first, eg 20/01/2005 display.date_yearfirst: [default: False] [currently: False] : boolean When True, prints and parses dates with the year first, eg 2005/01/20 display.encoding: [default: UTF-8] [currently: UTF-8] : str/unicode Defaults to the detected encoding of the console. Specifies the encoding to be used for strings returned by to_string, these are generally strings meant to be displayed on the console. display.expand_frame_repr: [default: True] [currently: True] : boolean Whether to print out the full DataFrame repr for wide DataFrames across multiple lines, `max_columns` is still respected, but the output will wrap-around across multiple "pages" if it''s width exceeds `display.width`. display.float_format: [default: None] [currently: None] : callable The callable should accept a floating point number and return a string with the desired format of the number. This is used in some places like SeriesFormatter. See core.format.EngFormatter for an example. display.height: [default: 60] [currently: 1000] : int Deprecated. (Deprecated, use `display.height` instead.) display.line_width: [default: 80] [currently: 1000] : int Deprecated. (Deprecated, use `display.width` instead.) display.max_columns: [default: 20] [currently: 500] : int max_rows and max_columns are used in __repr__() methods to decide if to_string() or info() is used to render an object to a string. In case python/IPython is running in a terminal this can be set to 0 and pandas will correctly auto-detect the width the terminal and swap to a smaller format in case all columns would not fit vertically. The IPython notebook, IPython qtconsole, or IDLE do not run in a terminal and hence it is not possible to do correct auto-detection. ''None'' value means unlimited. display.max_colwidth: [default: 50] [currently: 50] : int The maximum width in characters of a column in the repr of a pandas data structure. When the column overflows, a "..." placeholder is embedded in the output. display.max_info_columns: [default: 100] [currently: 100] : int max_info_columns is used in DataFrame.info method to decide if per column information will be printed. display.max_info_rows: [default: 1690785] [currently: 1690785] : int or None max_info_rows is the maximum number of rows for which a frame will perform a null check on its columns when repr''ing To a console. The default is 1,000,000 rows. So, if a DataFrame has more 1,000,000 rows there will be no null check performed on the columns and thus the representation will take much less time to display in an interactive session. A value of None means always perform a null check when repr''ing. display.max_rows: [default: 60] [currently: 500] : int This sets the maximum number of rows pandas should output when printing out various output. For example, this value determines whether the repr() for a dataframe prints out fully or just a summary repr. ''None'' value means unlimited. display.max_seq_items: [default: None] [currently: None] : int or None when pretty-printing a long sequence, no more then `max_seq_items` will be printed. If items are ommitted, they will be denoted by the addition of "..." to the resulting string. If set to None, the number of items to be printed is unlimited. display.mpl_style: [default: None] [currently: None] : bool Setting this to ''default'' will modify the rcParams used by matplotlib to give plots a more pleasing visual style by default. Setting this to None/False restores the values to their initial value. display.multi_sparse: [default: True] [currently: True] : boolean "sparsify" MultiIndex display (don''t display repeated elements in outer levels within groups) display.notebook_repr_html: [default: True] [currently: True] : boolean When True, IPython notebook will use html representation for pandas objects (if it is available). display.pprint_nest_depth: [default: 3] [currently: 3] : int Controls the number of nested levels to process when pretty-printing display.precision: [default: 7] [currently: 7] : int Floating point output precision (number of significant digits). This is only a suggestion display.width: [default: 80] [currently: 1000] : int Width of the display in characters. In case python/IPython is running in a terminal this can be set to None and pandas will correctly auto-detect the width. Note that the IPython notebook, IPython qtconsole, or IDLE do not run in a terminal and hence it is not possible to correctly detect the width. mode.sim_interactive: [default: False] [currently: False] : boolean Whether to simulate interactive mode for purposes of testing mode.use_inf_as_null: [default: False] [currently: False] : boolean True means treat None, NaN, INF, -INF as null (old way), False means None and NaN are null, but INF, -INF are not null (new way). Call def: pd.set_option(self, *args, **kwds)
De acuerdo con los http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html , si está ejecutando en un terminal (es decir, no en una notebook iPython, qtconsole o IDLE), es un sistema de 2 lineas que Pandas detecta automáticamente el ancho de su pantalla y se adapta sobre la marcha con la cantidad de columnas que muestra:
pd.set_option(''display.large_repr'', ''truncate'')
pd.set_option(''display.max_columns'', 0)
Establezca el ancho máximo de la columna usando:
pd.set_option(''max_colwidth'', 800)
Esta declaración particular establece el ancho máximo a 800 px, por columna.
Parece que todas las respuestas anteriores resuelven el problema. Un punto más: en lugar de pd.set_option(''option_name'')
, puedes usar el (auto-completado-capaz)
pd.options.display.width = None
Ver Pandas doc: Opciones y Configuraciones:
Las opciones tienen un nombre completo "estilo de puntos" que no distingue entre mayúsculas y minúsculas (por ejemplo,
display.max_rows
) Puede obtener / establecer opciones directamente como atributos del atributo deoptions
nivel superior:
In [1]: import pandas as pd In [2]: pd.options.display.max_rows Out[2]: 15 In [3]: pd.options.display.max_rows = 999 In [4]: pd.options.display.max_rows Out[4]: 999
[...]
para el max_...
params:
max_rows
ymax_columns
se usan en los__repr__()
para decidir sito_string()
oinfo()
se usan para representar un objeto en una cadena. En caso de que python / IPython se esté ejecutando en un terminal, esto se puede establecer en 0 y los pandas detectarán correctamente el ancho del terminal y cambiarán a un formato más pequeño en caso de que todas las columnas no se ajusten verticalmente. El portátil IPython, IPython qtconsole o IDLE no se ejecutan en un terminal y, por lo tanto, no es posible realizar la detección automática correcta. El valor ''None
'' significa ilimitado. [énfasis no en original]
para el width
param:
Ancho de la pantalla en caracteres. En caso de que python / IPython se esté ejecutando en un terminal, esto se puede establecer en
None
y los pandas detectarán automáticamente el ancho. Tenga en cuenta que el portátil IPython, IPython qtconsole o IDLE no se ejecutan en un terminal y, por lo tanto, no es posible detectar el ancho correctamente.
Prueba esto:
pd.set_option(''display.expand_frame_repr'', False)
De la documentación:
display.expand_frame_repr: boolean
Si se imprime la reproducción completa de DataFrame para los DataFrames amplios en varias líneas, se respeta max_columns, pero la salida se envolverá en múltiples "páginas" si el ancho excede a display.width. [predeterminado: verdadero] [actualmente: verdadero]
Consulte: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html
Puede configurar la pantalla de salida para que coincida con el ancho de su terminal actual:
pd.set_option(''display.width'', pd.util.terminal.get_terminal_size()[0])
Puede usar print df.describe().to_string()
para forzar que muestre la tabla completa. (Puedes usar to_string()
así para cualquier DataFrame. El resultado de describe
es solo un DataFrame).
El 8 es el número de filas en el DataFrame que contiene la "descripción" (porque describe
calcula 8 estadísticas, min, max, media, etc.).
Puedes ajustar las opciones de impresión de pandas con set_printoptions
.
In [3]: df.describe()
Out[3]:
<class ''pandas.core.frame.DataFrame''>
Index: 8 entries, count to max
Data columns:
x1 8 non-null values
x2 8 non-null values
x3 8 non-null values
x4 8 non-null values
x5 8 non-null values
x6 8 non-null values
x7 8 non-null values
dtypes: float64(7)
In [4]: pd.set_printoptions(precision=2)
In [5]: df.describe()
Out[5]:
x1 x2 x3 x4 x5 x6 x7
count 8.0 8.0 8.0 8.0 8.0 8.0 8.0
mean 69024.5 69025.5 69026.5 69027.5 69028.5 69029.5 69030.5
std 17.1 17.1 17.1 17.1 17.1 17.1 17.1
min 69000.0 69001.0 69002.0 69003.0 69004.0 69005.0 69006.0
25% 69012.2 69013.2 69014.2 69015.2 69016.2 69017.2 69018.2
50% 69024.5 69025.5 69026.5 69027.5 69028.5 69029.5 69030.5
75% 69036.8 69037.8 69038.8 69039.8 69040.8 69041.8 69042.8
max 69049.0 69050.0 69051.0 69052.0 69053.0 69054.0 69055.0
Sin embargo, esto no funcionará en todos los casos, ya que los pandas detectan el ancho de la consola y solo usarán to_string
si la salida se ajusta a la consola (consulte la cadena de set_printoptions
de set_printoptions
). En este caso, puede llamar explícitamente a to_string
como lo responde BrenBarn .
Actualizar
Con la versión 0.10 se changed la forma en que se imprimen los marcos de datos amplios:
In [3]: df.describe()
Out[3]:
x1 x2 x3 x4 x5 /
count 8.000000 8.000000 8.000000 8.000000 8.000000
mean 59832.361578 27356.711336 49317.281222 51214.837838 51254.839690
std 22600.723536 26867.192716 28071.737509 21012.422793 33831.515761
min 31906.695474 1648.359160 56.378115 16278.322271 43.745574
25% 45264.625201 12799.540572 41429.628749 40374.273582 29789.643875
50% 56340.214856 18666.456293 51995.661512 54894.562656 47667.684422
75% 75587.003417 31375.610322 61069.190523 67811.893435 76014.884048
max 98136.474782 84544.484627 91743.983895 75154.587156 99012.695717
x6 x7
count 8.000000 8.000000
mean 41863.000717 33950.235126
std 38709.468281 29075.745673
min 3590.990740 1833.464154
25% 15145.759625 6879.523949
50% 22139.243042 33706.029946
75% 72038.983496 51449.893980
max 98601.190488 83309.051963
Además, la API para configurar las opciones de pandas cambió:
In [4]: pd.set_option(''display.precision'', 2)
In [5]: df.describe()
Out[5]:
x1 x2 x3 x4 x5 x6 x7
count 8.0 8.0 8.0 8.0 8.0 8.0 8.0
mean 59832.4 27356.7 49317.3 51214.8 51254.8 41863.0 33950.2
std 22600.7 26867.2 28071.7 21012.4 33831.5 38709.5 29075.7
min 31906.7 1648.4 56.4 16278.3 43.7 3591.0 1833.5
25% 45264.6 12799.5 41429.6 40374.3 29789.6 15145.8 6879.5
50% 56340.2 18666.5 51995.7 54894.6 47667.7 22139.2 33706.0
75% 75587.0 31375.6 61069.2 67811.9 76014.9 72039.0 51449.9
max 98136.5 84544.5 91744.0 75154.6 99012.7 98601.2 83309.1
Si desea establecer opciones temporalmente para mostrar un DataFrame grande, puede usar option_context :
with pd.option_context(''display.max_rows'', -1, ''display.max_columns'', 5):
print df
Los valores de las opciones se restauran automáticamente al salir del bloque with
.
Solo utilizando estas 3 líneas funcionó para mí:
pd.set_option(''display.max_columns'', None)
pd.set_option(''display.expand_frame_repr'', False)
pd.set_option(''max_colwidth'', -1)
Anaconda / Python 3.6.5 / pandas: 0.23.0 / Visual Studio Code 1.26
Utilicé estos ajustes cuando la escala de datos es alta.
# environment settings:
pd.set_option(''display.max_column'',None)
pd.set_option(''display.max_rows'',None)
pd.set_option(''display.max_seq_items'',None)
pd.set_option(''display.max_colwidth'', 500)
pd.set_option(''expand_frame_repr'', True)
Puede consultar la documentación http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html