Imprima una cadena muy larga completamente en pandas dataframe

116

Estoy luchando con algo aparentemente muy simple. Tengo un marco de datos de pandas que contiene una cadena muy larga.

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

Ahora, cuando trato de imprimir lo mismo, no veo la cadena completa, prefiero ver solo una parte de la cadena.

Intenté las siguientes opciones

  • utilizando print(df.iloc[2])
  • utilizando to_html
  • utilizando to_string
  • Una de las respuestas de stackoverflow sugirió aumentar el ancho de la columna usando la opción de visualización de pandas, que tampoco funcionó.
  • Tampoco entendí cómo set_printoptionsme ayudaría.

Cualquier idea apreciada. ¡Parece muy simple, pero no puedo conseguirlo!

Yantraguru
fuente

Respuestas:

176

Puede usar options.display.max_colwidthpara especificar que desea ver más en la representación predeterminada:

In [2]: df
Out[2]:
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [3]: pd.options.display.max_colwidth
Out[3]: 50

In [4]: pd.options.display.max_colwidth = 100

In [5]: df
Out[5]:
                                                                               one
0                                                                              one
1                                                                              two
2  This is very long string very long string very long string veryvery long string

Y, de hecho, si solo desea inspeccionar el valor único, al acceder a él (como un escalar, no como una fila como lo df.iloc[2]hace) también verá la cadena completa:

In [7]: df.iloc[2,0]    # or df.loc[2,'one']
Out[7]: 'This is very long string very long string very long string veryvery long string'
joris
fuente
2
df.iloc [2,0] - no funciona - Imprimiré la primera y tercera fila y
cortaré
Funciona, si desea un elemento de la tercera fila y la primera columna. Si desea algo más, abra una nueva pregunta.
joris
¡Funciona, gracias! Tengo una lista de códigos postales en 1 columna y uso aplicar para encontrar la columna mínima y máxima usando una función: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']]. Apply (createMinMaxZipcode, axis = 1). Entonces, dentro de la función hago to_string en la serie (stringZipcodes = zipcodeList.to_string (header = False, index = False)). Las listas más largas de códigos postales dieron como resultado 3 puntos al final, por ejemplo, "1111 ...". De hecho, esto no sucede si selecciona los valores basados ​​en índice y columna (como un escalar). Mi pregunta: ¿por qué este comportamiento? ¿Me parece extraño configurar las opciones de visualización para aplicar influencia? ¡Gracias!
Wouter
1
@Wouter si tiene una pregunta diferente, es mejor hacer una nueva en lugar de comentar aquí
joris
1
Esto no funciona para una cadena más grande como un párrafo con varias líneas.
devssh
37

Úselo pd.set_option('display.max_colwidth', -1)para saltos de línea automáticos y celdas de varias líneas.

Este es un gran recurso sobre cómo usar la pantalla de jupyters con pandas al máximo.

omnesia
fuente
6
pd.set_option('display.max_colwidth', None)para versiones más recientes
cookiemonster
Esta es la mejor respuesta
clancy
17

Otro enfoque bastante simple es llamar a la función de lista:

list(df['one'][2])
# output:
['This is very long string very long string very long string veryvery long string']

No vale la pena mencionar, que no es bueno convencer para enumerar las columnas completas, pero para una línea simple, ¿por qué no?

Rocketq
fuente
1
Si ha reducido su df en función de algunos criterios de búsqueda y se reduce a una sola línea, esto no funciona. Es la forma más sencilla, para las necesidades de depuración de todos modos, y desearía que funcionara, pero no sé por qué no. Obtiene un "*** KeyError: 0". Supongo que tiene que ver con ser como un "escalar" cuando solo hay un valor.
Starman
A partir de hoy, esto devuelve todos los caracteres con una consulta en el df que devuelve dos celdas con 127 caracteres, a las que me he sentido frustrado al intentar acceder. Si eso ayuda a alguien
avirr
12

Otra forma más fácil de imprimir toda la cadena es llamar valuesal marco de datos.

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

print(df.values)

La salida será

[['one']
 ['two']
 ['This is very long string very long string very long string veryvery long string']]
bigbounty
fuente
4

¿Es esto lo que pretendías hacer?

In [7]: x =  pd.DataFrame({'one' : ['one', 'two', 'This is very long string very long string very long string veryvery long string']})

In [8]: x
Out[8]: 
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [9]: x['one'][2]
Out[9]: 'This is very long string very long string very long string veryvery long string'
fixxxer
fuente
4

Simplemente agregue la siguiente línea a su código antes de imprimir.

 pd.options.display.max_colwidth = 90  # set a value as your need

Simplemente puede realizar los siguientes pasos para configurar otras opciones adicionales,

  • Puede cambiar las opciones para la función pandas max_columns de la siguiente manera para mostrar más columnas

    import pandas as pd
    pd.options.display.max_columns = 10

    (esto permite que se muestren 10 columnas, puede cambiar esto según lo necesite)

  • De esa manera, puede cambiar el número de filas que necesita mostrar de la siguiente manera para mostrar más filas

    pd.options.display.max_rows = 999

    (esto permite imprimir 999 filas a la vez)

esto debería funcionar bien

Por favor, consulte el documento para cambiar más opciones / configuraciones para pandas

Amila Viraj
fuente
3

La forma en que a menudo trato la situación que usted describe es usar el .to_csv()método y escribir en stdout:

import sys

df.to_csv(sys.stdout)

Actualización: ¡ahora debería ser posible usarlo en Nonelugar de sys.stdoutcon un efecto similar!

Esto debería volcar todo el marco de datos, incluida la totalidad de las cadenas. Puede usar los parámetros to_csv para configurar separadores de columnas, si el índice se imprime, etc. Sin embargo, será menos bonito que representarlo correctamente.

Publiqué esto originalmente en respuesta a la pregunta algo relacionada en Datos de salida de todas las columnas en un marco de datos en pandas

usuario2428107
fuente
2

He creado una pequeña función de utilidad, esto funciona bien para mí

def display_text_max_col_width(df, width):
    with pd.option_context('display.max_colwidth', width):
        print(df)

display_text_max_col_width(train_df["Description"], 800)

Puedo cambiar la longitud del ancho según mis requisitos, sin establecer ninguna opción de forma permanente.

Sachin Rastogi
fuente
1

Si está utilizando un cuaderno jupyter, también puede imprimir el marco de datos de pandas como tabla HTML, que imprimirá cadenas completas.

from IPython.display import display, HTML
display(HTML(df.to_html()))

Salida

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string
kHarshit
fuente