如何显示数据框的前+后N行

时间:2019-10-06 19:56:53

标签: python pandas dataframe

我正在寻找最好的方法来同时快速预览DataFrame的前N行和后N行。

我意识到我可以分别使用df.head(N)和df.tail(N),但这将返回两个DataFrame。最好是简单地调用这两个单独的函数并将它们串联起来,还是有一个更简单的方法呢?

当前:

df.head(5)     # first 5 rows
df.tail(5)     # last 5 rows

所需:

df.headtail(5)     # 10 rows total

想将前5行和后5行显示为单个DataFrame,以便快速预览数据集的“范围”。

3 个答案:

答案 0 :(得分:1)

print(df.to_string(max_rows=10))

示例:

>>> df = pd.DataFrame({'one': range(100)})
>>> print(df.to_string(max_rows=10))                                          
    one
0     0
1     1
2     2
3     3
4     4
..  ...
95   95
96   96
97   97
98   98
99   99

同样,您可以设置max_cols

不太好看的版本(imho),它返回数据帧的一部分:

df.iloc[[*range(5), *range(-5, 0)]]

答案 1 :(得分:0)

这是另一种方式:

df = pd.DataFrame({'item': range(100)})
sliced_df = df.head(5)
sliced_df = sliced_df.append(df.tail(5))
print (sliced_df)
# output 
     item
0     0
1     1
2     2
3     3
4     4
95   95
96   96
97   97
98   98
99   99

答案 2 :(得分:0)

使用.iloc简单,并根据range构造一个切片

示例:

np.random.seed(0)
df = pd.DataFrame(np.random.randint(0, 999, 100).reshape(20,5), columns=list('ABCDE'))

Out[240]:
      A    B    C    D    E
0   684  559  629  192  835
1   763  707  359    9  723
2   277  754  804  599   70
3   472  600  396  314  705
4   486  551   87  174  600
5   849  677  537  845   72
6   777  916  115  976  755
7   709  847  431  448  850
8    99  984  177  755  797
9   659  147  910  423  288
10  961  265  697  639  544
11  543  714  244  151  675
12  510  459  882  183   28
13  802  128  128  932   53
14  901  550  488  756  273
15  335  388  617   42  442
16  543  888  257  321  937
17   57  291  870  119  779
18  430   82   91  896  398
19  611  565  908  633  938

head_tail_slice = list(range(5))+list(range(-5,0))

df.iloc[head_tail_slice]

Out[242]:
      A    B    C    D    E
0   684  559  629  192  835
1   763  707  359    9  723
2   277  754  804  599   70
3   472  600  396  314  705
4   486  551   87  174  600
15  335  388  617   42  442
16  543  888  257  321  937
17   57  291  870  119  779
18  430   82   91  896  398
19  611  565  908  633  938