Pandy to_html () obcina zawartość ciągu

81

Mam obiekt Python Pandas DataFramezawierający dane tekstowe. Mój problem polega na tym, że kiedy używamto_html() funkcji, obcina ona ciągi w danych wyjściowych.

Na przykład:

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

Dane wyjściowe są obcinane w 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>

Jest powiązane pytanie dotyczące SO, ale używa on symboli zastępczych i funkcji wyszukiwania / zamieniania do postprocessingu HTML, czego chciałbym uniknąć:

Czy istnieje prostsze rozwiązanie tego problemu? Nie mogłem znaleźć nic związanego z dokumentacją .

Timo
źródło
2
Jak przeglądasz zawartość, czy to przez iPython? spróbuj tego, pd.set_option('display.max_colwidth', -1)a następnie wydrukuj HTML, powinieneś zauważyć, że wyświetla pełny tekst, nie ma to nic wspólnego z obcięciem rzeczywistych danych, tylko ustawieniem wyświetlania
EdChum
@EdChum Tak, rzeczywiście patrzyłem na HTML przez IPython, ale również uzyskałem te same wyniki w zwykłym terminalu Pythona. Ale tak, set_option to naprawia! Zarówno w terminalu, jak i w IPythonie. Nie wiedziałem wcześniej o takiej możliwości.
Timo,
pandy próbują cię chronić przed wyświetlaniem ogromnych ilości danych wyjściowych, które mogą zabić mniejsze środowiska Pythona, oprócz niejasnych błędów, o których nie słyszałem, aby kiedykolwiek obcięły dane
EdChum

Odpowiedzi:

108

To, co widzisz, to pandy obcinające dane wyjściowe tylko w celu wyświetlenia.

Domyślny max_colwidth wartość to 50, czyli to, co widzisz.

Możesz ustawić tę wartość na cokolwiek chcesz lub możesz ustawić ją na -1, co skutecznie to wyłącza:

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

Chociaż odradzałbym to, lepiej byłoby ustawić to na coś, co można łatwo wyświetlić w konsoli lub ipythonie.

Listę opcji można znaleźć tutaj: http://pandas.pydata.org/pandas-docs/stable/options.html

EdChum
źródło
8
`" ... "w df.to_html ()` zwraca wartość True. Wygląda na pandasto, że obcina wartość wyjściową, a nie tylko wyświetlacz.
Chris Chudzicki
Mam bardzo ciekawy przypadek, który opisuję w tym pytaniu: stackoverflow.com/questions/51260756/… gdzie wartość komórki w tabeli html zawiera słownik. Słowniki, które nie są tak duże jak ten, są pokazane dobrze w innych tabelach, ale ten konkretny, bardzo długi słownik jest skracany kropkami i nie mogę go pokazać. Eksperymentowałem z pd.set_option ('display.max_rows', 1000), bez powodzenia. Jakieś sugestie, a nawet odpowiedź na moje pytanie?
user637338
Czy nadal jest to sposób na zrobienie tego w wersji 0.24?
Jason Strimpel
@JasonStrimpel tak, wierzę, że tak
EdChum
1
@Superdooperhero nie możesz, opcje wyświetlania wpływają na wszystkie kolumny lub wiersze
EdChum
19

wydaje się, że pd.set_option('display.max_colwidth', -1)jest to rzeczywiście jedyna opcja. Aby zapobiec nieodwracalnym globalnym zmianom w sposobie prezentowania ramek danych w konsoli, możesz zapisać poprzednie ustawienie w zmiennej i przywrócić je natychmiast po użyciu w następujący sposób:

    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
źródło
45
Jest dużo prostsze rozwiązanie, jak ustawić opcję tymczasową:with pd.option_context('display.max_colwidth', -1): output_html = df.to_html()
hynekcer