Como imprimir pandas DataFrame sem índice

170

Quero imprimir o quadro de dados inteiro, mas não quero imprimir o índice

Além disso, uma coluna é do tipo data e hora, eu só quero imprimir a hora, não a data.

O quadro de dados se parece com:

   User ID           Enter Time   Activity Number
0      123  2014-07-08 00:09:00              1411
1      123  2014-07-08 00:18:00               893
2      123  2014-07-08 00:49:00              1041

Quero imprimir como

User ID   Enter Time   Activity Number
123         00:09:00              1411
123         00:18:00               893
123         00:49:00              1041
lserlohn
fonte
1
Você está usando terminologia ("quadro de dados", "índice") que me faz pensar que você está realmente trabalhando em R, não em Python. Por favor, esclareça. Independentemente disso, precisamos ver o código existente que imprime esse "quadro de dados" para ter alguma chance de ajudar. Leia e siga as instruções em stackoverflow.com/help/mcve
zwol
... Vou dizer que, se esse é realmente Python e esses são datetime.datetimeobjetos na segunda coluna, você pode imprimir apenas o tempo usando o strftimemétodo, com uma string de formato apropriada (provavelmente "%H:%M:%S").
Zwol
17
@Zack: DataFrameé o nome da estrutura de dados 2D pandas, uma popular biblioteca de análise de dados Python.
DSM

Respostas:

217
print df.to_string(index=False)
Pavol Zibrita
fonte
8
Isso é bom, mas não contém mais o tab-sep, que é mais do que um obstáculo ao copiar para o Excel
Rockbar
7
@ Rockbar se você deseja copiar / exportar para o Excel, você deve estar usando de df.to_csvqualquer maneira.
U2EF1
3
Para mim, os rótulos das colunas não são justificáveis ​​para os dados (faltam espaços no início). Talvez porque meus dados ocupem mais caracteres que o rótulo da coluna. Adicionar o argumento justify = 'left' o corrige, embora obviamente mude o alinhamento dos rótulos da coluna.
ErnestScribbler
1
Você também pode usar df.to_clipboard()e colar no Excel. Útil para lidar com o idiota do Windows "você não pode editar um documento aberto" BS.
usar o seguinte
df.to_excel('filename.xlsx', index=False)
Sonicsmooth
30
print(df.to_csv(sep='\t', index=False))

Ou possivelmente:

print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))
U2EF1
fonte
3
Como isso é possível, pois o DataFrame.to_csv não possui um valor de retorno? Recebo apenas Nenhuma impressa.
jung Rhew
Na verdade, a OP pediu para imprimir. Este comentário não imprime o quadro de dados, mas o salva em CSV.
Paul
24

A linha abaixo oculta a coluna de índice do DataFrame quando você imprime

df.style.hide_index()
AnarchistGeek
fonte
8
Requer pacote Jinja2 e não produz a saída desejada com o Python 3.7
PeterXX
1
Acho que essa resposta é mais eficaz para copiar / colar em uma tabela ao fazer um relatório, obrigado!
leas
8

Se você deseja imprimir bastante os quadros de dados, pode usar o pacote tabulado .

import pandas as pd
import numpy as np
from tabulate import tabulate

def pprint_df(dframe):
    print tabulate(dframe, headers='keys', tablefmt='psql', showindex=False)

df = pd.DataFrame({'col1': np.random.randint(0, 100, 10), 
    'col2': np.random.randint(50, 100, 10), 
    'col3': np.random.randint(10, 10000, 10)})

pprint_df(df)

Especificamente, o showindex=False, como o nome diz, permite que você não mostre o índice. A saída teria a seguinte aparência:

+--------+--------+--------+
|   col1 |   col2 |   col3 |
|--------+--------+--------|
|     15 |     76 |   5175 |
|     30 |     97 |   3331 |
|     34 |     56 |   3513 |
|     50 |     65 |    203 |
|     84 |     75 |   7559 |
|     41 |     82 |    939 |
|     78 |     59 |   4971 |
|     98 |     99 |    167 |
|     81 |     99 |   6527 |
|     17 |     94 |   4267 |
+--------+--------+--------+
kingmakerking
fonte
8

Para manter a "impressão bonita", use

from IPython.display import HTML
HTML(df.to_html(index=False))

insira a descrição da imagem aqui

Antony Hatchkins
fonte
4

Se você quiser apenas imprimir uma string / json, pode ser resolvido com:

print(df.to_string(index=False))

Se você também deseja serializar os dados ou até mesmo enviar para um MongoDB, seria melhor fazer algo como:

document = df.to_dict(orient='list')

Até agora, existem 6 maneiras de orientar os dados. Verifique mais nos documentos do panda que melhor se adequam a você.

Ziul
fonte
4

Para responder à pergunta "Como imprimir o quadro de dados sem um índice", você pode definir o índice como uma matriz de seqüências de caracteres vazias (uma para cada linha no quadro de dados), assim:

blankIndex=[''] * len(df)
df.index=blankIndex

Se usarmos os dados da sua postagem:

row1 = (123, '2014-07-08 00:09:00', 1411)
row2 = (123, '2014-07-08 00:49:00', 1041)
row3 = (123, '2014-07-08 00:09:00', 1411)
data = [row1, row2, row3]
#set up dataframe
df = pd.DataFrame(data, columns=('User ID', 'Enter Time', 'Activity Number'))
print(df)

que normalmente seria impresso como:

   User ID           Enter Time  Activity Number
0      123  2014-07-08 00:09:00             1411
1      123  2014-07-08 00:49:00             1041
2      123  2014-07-08 00:09:00             1411

Criando uma matriz com tantas seqüências de caracteres vazias quanto linhas no quadro de dados:

blankIndex=[''] * len(df)
df.index=blankIndex
print(df)

Ele removerá o índice da saída:

  User ID           Enter Time  Activity Number
      123  2014-07-08 00:09:00             1411
      123  2014-07-08 00:49:00             1041
      123  2014-07-08 00:09:00             1411

E no Jupyter Notebooks renderizaria conforme esta captura de tela: Juptyer Notebooks dataframe sem coluna de índice

roj
fonte
Apesar de um pouco estranha, esta é a melhor solução aqui da IMO.
Corel
0

Semelhante a muitas das respostas acima que usam df.to_string (index = False), geralmente considero necessário extrair uma única coluna de valores. Nesse caso, você pode especificar uma coluna individual com .to_string usando o seguinte:

data = pd.DataFrame({'col1': np.random.randint(0, 100, 10), 
    'col2': np.random.randint(50, 100, 10), 
    'col3': np.random.randint(10, 10000, 10)})

print(data.to_string(columns=['col1'], index=False)

print(data.to_string(columns=['col1', 'col2'], index=False))

Que fornece uma saída fácil de copiar (e sem índice) para uso em outros lugares (Excel). Saída de amostra:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
BigTom
fonte