Pandas to_html () trunca el contenido de la cadena

81

Tengo un DataFrameobjeto Python Pandas que contiene datos textuales. Mi problema es que cuando uso la to_html()función, trunca las cadenas en la salida.

Por ejemplo:

import pandas
df = pandas.DataFrame({'text': ['Lorem ipsum dolor sit amet, consectetur adipiscing elit.']})
print (df.to_html())

La salida se trunca en adapis...

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>text</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td> Lorem ipsum dolor sit amet, consectetur adipis...</td>
    </tr>
  </tbody>
</table>

Hay una pregunta relacionada en SO, pero usa marcadores de posición y funcionalidad de búsqueda / reemplazo para posprocesar el HTML, lo que me gustaría evitar:

¿Existe una solución más sencilla para este problema? No pude encontrar nada relacionado con la documentación .

Timo
fuente
2
¿Cómo está viendo el contenido, es a través de iPython? intente esto pd.set_option('display.max_colwidth', -1)y luego imprima el html, debería encontrar que muestra el texto completo, esto no tiene nada que ver con el truncamiento de los datos reales, solo una configuración de visualización
EdChum
@EdChum Sí, de hecho estaba mirando el HTML a través de IPython, pero también obtuve los mismos resultados en una terminal Python normal. Pero sí, ¡set_option soluciona eso! Tanto en la terminal como en IPython. No conocía esa posibilidad antes.
Timo
pandas intenta protegerlo de la visualización de grandes cantidades de resultados que podrían matar entornos de python menores, además de errores oscuros que no he oído que hayan truncado los datos
EdChum

Respuestas:

106

Lo que está viendo son pandas truncando la salida solo con fines de visualización.

El valor por defecto max_colwidth valor es 50, que es lo que está viendo.

Puede establecer este valor en lo que desee o puede establecerlo en -1, lo que efectivamente desactiva esto:

pd.set_option('display.max_colwidth', -1)

Aunque desaconsejaría esto, sería mejor configurarlo en algo que se pueda mostrar fácilmente en su consola o ipython.

Puede encontrar una lista de las opciones aquí: http://pandas.pydata.org/pandas-docs/stable/options.html

EdChum
fuente
8
`" ... "en df.to_html ()` se evalúa como True. Seguro que parece que pandasestá truncando el valor de salida, no solo la pantalla.
Chris Chudzicki
Tengo un caso muy curioso, que describo en esta pregunta: stackoverflow.com/questions/51260756/… donde un valor de celda en una tabla html contiene un diccionario. Los diccionarios, que no son tan grandes como este, se muestran bien en otras tablas, pero este diccionario muy largo en particular se abrevia con puntos y no puedo hacer que aparezca. Experimenté con pd.set_option ('display.max_rows', 1000), sin suerte. ¿Alguna sugerencia para esto o incluso una respuesta a mi pregunta?
user637338
¿Sigue siendo esta la forma de hacer esto en v 0.24?
Jason Strimpel
@JasonStrimpel sí, eso creo
EdChum
1
@Superdooperhero no puede, las opciones de visualización afectan a todas las columnas o filas
EdChum
19

parece que de pd.set_option('display.max_colwidth', -1)hecho es la única opción. Para evitar cambios globales irreversibles de cómo se presentan los marcos de datos en la consola, puede guardar la configuración anterior en una variable y restaurarla inmediatamente después del uso, de la siguiente manera:

    old_width = pd.get_option('display.max_colwidth')
    pd.set_option('display.max_colwidth', -1)
    open('some_file.html', 'w').write(some_data.to_html())
    pd.set_option('display.max_colwidth', old_width)
Boris Gorelik
fuente
44
Hay una solución mucho más simple de cómo configurar la opción temporal:with pd.option_context('display.max_colwidth', -1): output_html = df.to_html()
hynekcer