如何在没有索引的情况下打印Pandas DataFrame


170

我想打印整个数据框,但是我不想打印索引

此外,一列是日期时间类型,我只想打印时间,而不是日期。

数据框如下所示:

   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

我希望它打印为

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

1
您使用的术语(“数据框架”,“索引”)使我觉得您实际上是在R中工作,而不是Python。请澄清。无论如何,我们都需要查看打印此“数据框”的现有代码,以便有机会获得帮助。请阅读并遵循stackoverflow.com/help/mcve
zwol 2014年

...我要说的是,如果这实际上是Python,而这些是datetime.datetime第二列中的对象,那么您可以使用strftime带有适当格式字符串(可能是"%H:%M:%S")的方法仅打印时间。
zwol 2014年

17
@Zack:DataFramepandas流行的Python数据分析库中2D数据结构的名称。
DSM

Answers:


216
print df.to_string(index=False)

8
很好,但是它不再包含制表符,而是复制到excel时的障碍
Rockbar

7
@Rockbar如果要复制/导出到excel,则df.to_csv无论如何都应该使用。
U2EF1

3
对我来说,列标签不符合数据要求(开始时缺少空格)。可能是因为我的数据占用了比列标签更多的字符。添加参数justify ='left'可以解决该问题,尽管显然会更改列标签的对齐方式。
ErnestScribbler

1
您还可以使用df.to_clipboard()然后粘贴到Excel中。对于处理Windows愚蠢的“您无法编辑打开的文档” BS很有用。
BallpointBen19年

df.to_excel('filename.xlsx', index=False)
Sonicsmooth,

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

或可能:

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

3
由于DataFrame.to_csv没有返回值,这怎么可能?我只打印出“无”。
jung rhew

确实,OP要求打印。此注释不会打印数据框,而是将其保存到CSV。
保罗

24

下面的行在打印时将隐藏DataFrame的索引列

df.style.hide_index()

8
需要jinja2软件包,并且无法使用Python 3.7生成所需的输出
PeterXX

1
我发现在做出报告时,此答案最有效地将表格复制/粘贴到表格中,谢谢!
监听中心

8

如果要漂亮地打印数据框,则可以使用列表包。

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)

具体来说,showindex=False顾名思义,,您可以不显示索引。输出如下所示:

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


4

如果只想打印一个字符串/ json,可以使用以下方法解决:

print(df.to_string(index=False))

Buf如果您也想序列化数据甚至发送到MongoDB,最好执行以下操作:

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

到目前为止,有6种方法可以调整数据方向,请在熊猫文档中查看更多适合您的方法。


4

要回答“如何在没有索引的情况下打印数据框”问题,可以将索引设置为空字符串数组(数据帧中的每一行一个),如下所示:

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

如果我们使用您帖子中的数据:

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)

通常将其打印为:

   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

通过创建一个空字符串与数据框中的行数一样多的数组:

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

它将从输出中删除索引:

  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

并且在Jupyter Notebook中将按照此屏幕截图进行渲染: 没有索引列的Juptyer Notebooks数据框


尽管有点怪异,但这是IMO的最佳解决方案。
Corel

0

与上面使用df.to_string(index = False)的许多答案类似,我经常发现有必要提取值的单列,在这种情况下,您可以使用.to_string使用以下内容指定单个列:

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

它提供了易于复制(且无索引)的输出,可用于粘贴到其他地方(Excel)。样本输出:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.