Considere este exemplo:
import pandas as pd
df = pd.DataFrame({
"LIDSA": [0, 1, 2, 3],
"CAE": [3, 5, 7, 9],
"FILA": [1, 2, 3, 4], # 2 is default, so table idx 1 is default
"VUAMA": [0.5, 1.0, 1.5, 2.0],
})
df_colnames = { # https://stackoverflow.com/q/48243818
"LIDSA": "Lorem ipsum dolor sit amet",
"CAE": "Consectetur adipiscing elit",
"FILA": "Fusce imperdiet libero arcu",
"VUAMA": "Vitae ultricies augue molestie ac",
}
# "Pandas autodetects the size of your terminal window if you set pd.options.display.width = 0" https://stackoverflow.com/q/11707586
with pd.option_context('display.max_rows', None, 'display.max_columns', None, 'display.width', 0, 'max_colwidth', 20, 'display.float_format', "{:.2f}".format):
df_str = df.rename(df_colnames,axis=1).to_string()
print(df_str)
Isso resulta na impressão do terminal stdout, no momento com 111 caracteres de largura:
Lorem ipsum dolor sit amet Consectetur adipiscing elit Fusce imperdiet libero arcu Vitae ultricies augue
molestie ac
0 0 3 1
0.50
1 1 5 2
1.00
2 2 7 3
1.50
3 3 9 4
2.00
Portanto, apenas a última coluna foi quebrada (e correspondentemente, os valores para ela). Eu teria preferido que cada nome de coluna longo fosse quebrado por linha/quebrado em palavras com, digamos, 20 caracteres e, em seguida, os valores fossem gerados de forma correspondente, algo como:
Lorem ipsum dolor Consectetur Fusce imperdiet Vitae ultricies
sit amet adipiscing elit libero arcu augue molestie ac
0 0 3 1 0.50
1 1 5 2 1.00
2 2 7 3 1.50
3 3 9 4 2.00
Eu pensei 'max_colwidth', 20
que faria isso, mas aparentemente não faz.
Eu até tentei adicionar quebras de linha explícitas nos nomes longos das colunas, mas elas são renderizadas como \n
e o nome da coluna ainda está em uma linha (conforme observado também em Quebras de linha nos nomes das colunas do pandas )
Então, é possível "quebrar palavras"/"quebra de linha" em nomes de colunas longas no Pandas para saída de string de texto simples?
Você poderia usar
textwrap.wrap
etabulate
:Saída:
Com formatação flutuante:
Saída:
O Pandas não oferece uma maneira integrada de agrupar ou quebrar automaticamente nomes longos de colunas entre linhas quando você transforma um DataFrame em uma string. A configuração chamada max_colwidth afeta apenas os dados dentro da tabela, não os próprios títulos das colunas. Se você tentou adicionar suas próprias quebras de linha nos nomes das colunas, notou que elas não alteram realmente a forma como o título é exibido; em vez disso, você vê caracteres "\n" na sua saída, o que não é o que você deseja.
Para que os nomes das colunas sejam agrupados em várias linhas, você terá que ser um pouco criativo e fazer isso sozinho. Você precisará:
Escreva uma função que possa receber um nome de coluna longo e dividi-la em partes menores, sendo cada parte curta o suficiente (por exemplo, não mais que 20 caracteres) para caber em sua própria linha. Use esta função para processar todos os nomes de colunas e, em seguida, ajuste como seu DataFrame é exibido para que esses nomes de múltiplas linhas pareçam corretos. Este método envolve alterar manualmente os nomes das colunas para incluir quebras de linha onde você deseja e, em seguida, certificar-se de que a representação de string do DataFrame (quando você imprimi-lo) respeita essas quebras. Trata-se mais de preparar seus dados e configurações de exibição antes de imprimir ou mostrar seu DataFrame.