Solución:
Podrías usar a['Text'].str.len().max()
para calcular la longitud de la cuerda más larga en a['Text']
y usa ese número, N
, en un formateador justificado a la izquierda '{:<Ns}'.format
:
In [211]: print(a.to_string(formatters={'Text':'{{:<{}s}}'.format(a['Text'].str.len().max()).format}, index=False))
Text Value
abcdef 12.34
x 4.20
Si está dispuesto a utilizar otra biblioteca, tabular haré esto –
$ pip install tabulate
y luego
from tabulate import tabulate
df = pd.DataFrame ({'Text': ['abcdef', 'x'], 'Value': [12.34, 4.2]})
print(tabulate(df, showindex=False, headers=df.columns))
Text Value
------ -------
abcdef 12.34
x 4.2
También tiene varios otros formatos de salida.
Esto funciona en Python 3.7 (functools es parte de esa versión ahora)
# pylint: disable=C0103,C0200,R0205
from __future__ import print_function
import pandas as pd
import functools
@staticmethod
def displayDataFrame(dataframe, displayNumRows=True, displayIndex=True, leftJustify=True):
# type: (pd.DataFrame, bool, bool, bool) -> None
"""
:param dataframe: pandas DataFrame
:param displayNumRows: If True, show the number or rows in the output.
:param displayIndex: If True, then show the indexes
:param leftJustify: If True, then use technique to format columns left justified.
:return: None
"""
if leftJustify:
formatters = {}
for columnName in list(dataframe.columns):
columnType = type(columnName) # The magic!!
# print("{} => {}".format(columnName, columnType))
if columnType == type(bool):
form = "{{!s:<8}}".format()
elif columnType == type(float):
form = "{{!s:<5}}".format()
else:
max = dataframe[columnName].str.len().max()
form = "{{:<{}s}}".format(max)
formatters[columnName] = functools.partial(str.format, form)
print(dataframe.to_string(index=displayIndex, formatters=formatters), end="nn")
else:
print(dataframe.to_string(index=displayIndex), end="nn")
if displayNumRows:
print("Num Rows: {}".format(len(dataframe)), end="nn")
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)