问题:如何在没有索引的情况下打印Pandas DataFrame
我想打印整个数据框,但是我不想打印索引
此外,一列是日期时间类型,我只想打印时间,而不是日期。
数据框如下所示:
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
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
回答 0
print df . to_string ( index = False )
print df.to_string(index=False)
回答 1
print ( df . to_csv ( sep = '\t' , index = False ))
或可能:
print ( df . to_csv ( columns =[ 'A' , 'B' , 'C' ], sep = '\t' , index = False ))
print(df.to_csv(sep='\t', index=False))
Or possibly:
print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))
回答 2
下面的行在打印时将隐藏DataFrame的索引列
df . style . hide_index ()
The line below would hide the index column of DataFrame when you print
df.style.hide_index()
回答 3
如果要漂亮地打印数据框,则可以使用列表 包。
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 |
+--------+--------+--------+
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 |
+--------+--------+--------+
回答 4
保留“精美印刷”使用
from IPython . display import HTML
HTML ( df . to_html ( index = False ))
To retain “pretty-print” use
from IPython.display import HTML
HTML(df.to_html(index=False))
回答 5
如果只想打印一个字符串/ json,可以使用以下方法解决:
print(df.to_string(index=False))
Buf如果您也想序列化数据甚至发送到MongoDB,最好执行以下操作:
document = df.to_dict(orient='list')
到目前为止,有6种方法可以调整数据方向,请在熊猫文档中 查看更多适合您的方法。
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.
回答 6
要回答“如何在没有索引的情况下打印数据框”问题,可以将索引设置为空字符串数组(数据帧中的每一行一个),如下所示:
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数据框
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
回答 7
与上面使用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
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