对于Pandas中的DataFrame,如何选择前5个值和后5个值? 例如
In [11]: df
Out[11]:
A B C
2012-11-29 0 0 0
2012-11-30 1 1 1
2012-12-01 2 2 2
2012-12-02 3 3 3
2012-12-03 4 4 4
2012-12-04 5 5 5
2012-12-05 6 6 6
2012-12-06 7 7 7
2012-12-07 8 8 8
2012-12-08 9 9 9
如何显示第一行和最后两行?
答案 0 :(得分:12)
print (np.r_[0:2, -2:0])
[ 0 1 -2 -1]
df = df.iloc[np.r_[0:2, -2:0]]
print (df)
A B C
2012-11-29 0 0 0
2012-11-30 1 1 1
2012-12-07 8 8 8
2012-12-08 9 9 9
df = df.iloc[np.r_[0:4, -4:0]]
print (df)
A B C
2012-11-29 0 0 0
2012-11-30 1 1 1
2012-12-01 2 2 2
2012-12-02 3 3 3
2012-12-05 6 6 6
2012-12-06 7 7 7
2012-12-07 8 8 8
2012-12-08 9 9 9
答案 1 :(得分:8)
您可以使用df.head(5)
和df.tail(5)
获得前五名和后五名。
您可以选择创建新数据框和append()
head and tail:
new_df = df.tail(5)
new_df = new_df.append(df.head(5))
答案 2 :(得分:5)
小简单功能:
def ends(df, x=5):
return df.head(x).append(df.tail(x))
并像这样使用:
df = pd.DataFrame(np.random.rand(15,6))
ends(df,2)
我实际上使用了这么多,我认为添加到pandas将是一个很棒的功能。(没有功能添加到pandas.DataFrame核心API)我在导入之后添加它这样:
import pandas as pd
def ends(df, x=5):
return df.head(x).append(df.tail(x))
setattr(pd.DataFrame,'ends',ends)
像这样使用:
import numpy as np
df = pd.DataFrame(np.random.rand(15,6))
df.ends(2)
答案 3 :(得分:3)
为此,您应同时使用head()
和tail()
。我认为最简单的方法是:
df.head(5).append(df.tail(5))
答案 4 :(得分:2)
不完全相同的问题,但如果您只想显示上/下5行(例如jupyter中的display
或常规{{1如果您使用pd.option_context
上下文,则可能有一种比这更简单的方法。
print
输出:
#make 100 3d random numbers
df = pd.DataFrame(np.random.randn(100,3))
# sort them by their axis sum
df = df.loc[df.sum(axis=1).index]
with pd.option_context('display.max_rows',10):
print(df)
答案 5 :(得分:0)
你可以使用df.head(2)和df.tail(2)
答案 6 :(得分:0)
与Linas Fx合作。
在下面定义
pd.DataFrame.less = lambda df, n=10: df.head(n//2).append(df.tail(n//2))
然后您只能输入df.less()
与类型df.head().append(df.tail())
如果您输入df.less(2)
,则结果与df.head(1).append(df.tail(1))
答案 7 :(得分:0)
在 Jupyter 中,扩展@bolster的答案,我们将创建一个可重复使用的便捷功能:
def display_n(df,n):
with pd.option_context('display.max_rows',n*2):
display(df)
然后
display_n(df,2)
返回
0 1 2
0 0.167961 -0.732745 0.952637
1 -0.050742 -0.421239 0.444715
... ... ... ...
98 0.085264 0.982093 -0.509356
99 -0.758963 -0.578267 -0.115865
(除非是格式良好的HTML表格)
当df为df = pd.DataFrame(np.random.randn(100,3))
注意:
display
修改为print
来使打印的内容与文本相同。py
的{{1}}或ipy
文件中,以在所有笔记本电脑中自动加载上述功能。 答案 8 :(得分:0)
如果只想将其保留在熊猫中,可以使用apply()
连接头和尾:
import pandas as pd
from string import ascii_lowercase, ascii_uppercase
df = pd.DataFrame(
{"upper": list(ascii_uppercase), "lower": list(ascii_lowercase)}, index=range(1, 27)
)
df.apply(lambda x: pd.concat([x.head(2), x.tail(2)]))
upper lower
1 A a
2 B b
25 Y y
26 Z z