How to print pandas DataFrame without index

PythonDatetimePandasDataframe

Python Problem Overview


I want to print the whole dataframe, but I don't want to print the index

Besides, one column is datetime type, I just want to print time, not date.

The dataframe looks like:

   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

I want it print as

User ID   Enter Time   Activity Number
123         00:09:00              1411
123         00:18:00               893
123         00:49:00              1041

Python Solutions


Solution 1 - Python

python 2.7

print df.to_string(index=False)

python 3

print(df.to_string(index=False))

Solution 2 - Python

The line below would hide the index column of DataFrame when you print

df.style.hide_index()

Update: tested w Python 3.7

Solution 3 - Python

print(df.to_csv(sep='\t', index=False))

Or possibly:

print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))

Solution 4 - Python

To retain "pretty-print" use

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

enter image description here

Solution 5 - Python

If you want to pretty print the data frames, then you can use tabulate package.

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)

Specifically, the showindex=False, as the name says, allows you to not show index. The output would look as follows:

+--------+--------+--------+
|   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 |
+--------+--------+--------+

Solution 6 - Python

To answer the "How to print dataframe without an index" question, you can set the index to be an array of empty strings (one for each row in the dataframe), like this:

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

If we use the data from your post:

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)

which would normally print out as:

   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

By creating an array with as many empty strings as there are rows in the data frame:

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

It will remove the index from the output:

  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

And in Jupyter Notebooks would render as per this screenshot: Juptyer Notebooks dataframe with no index column

Solution 7 - Python

If you just want a string/json to print it can be solved with:

print(df.to_string(index=False))

Buf if you want to serialize the data too or even send to a MongoDB, would be better to do something like:

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

There are 6 ways by now to orient the data, check more in the panda docs which better fits you.

Solution 8 - Python

Anyone working on Jupyter Notebook to print DataFrame without index column, this worked for me:

display(table.hide_index())

Solution 9 - Python

Similar to many of the answers above that use df.to_string(index=False), I often find it necessary to extract a single column of values in which case you can specify an individual column with .to_string using the following:

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))

Which provides an easy to copy (and index free) output for use pasting elsewhere (Excel). Sample output:

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

Solution 10 - Python

Taking from kingmakerking's answer:

Jupyter notebook can convert GFM Markdown table syntax into a table when you change the cell to markdown.

So, change tablefmt to 'github' instead of 'psql' and copy and paste.

    print(tabulate(dframe, headers='keys', tablefmt='github', showindex=False))

(Python 3) enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionlserlohnView Question on Stackoverflow
Solution 1 - PythonPavol ZibritaView Answer on Stackoverflow
Solution 2 - PythonAnarchistGeekView Answer on Stackoverflow
Solution 3 - PythonU2EF1View Answer on Stackoverflow
Solution 4 - PythonAntony HatchkinsView Answer on Stackoverflow
Solution 5 - PythonkingmakerkingView Answer on Stackoverflow
Solution 6 - PythonrojView Answer on Stackoverflow
Solution 7 - PythonZiulView Answer on Stackoverflow
Solution 8 - PythonthisisyuuView Answer on Stackoverflow
Solution 9 - PythoncallpeteView Answer on Stackoverflow
Solution 10 - PythonS.Doe_DudeView Answer on Stackoverflow