2017-07-28 77 views
1

我怎样才能从一个数据帧的头部和尾部从pandas.Dataframe获得k(比方说100)条目? 我会建议2个单独的步骤和合并操作,但这似乎很单调。有没有更好的办法? 我试图使用df.iloc[:100,:-100],但那只会返回前100个记录。熊猫从头部和尾部拿k个条目

回答

2

您可以使用ilocnumpy.r_为concanecate指数:

N = 3 
df = df.iloc[np.r_[0:N, -N:0]] 

样品

np.random.seed(45) 
df = pd.DataFrame(np.random.randint(10, size=(10,5))) 
print (df) 
    0 1 2 3 4 
0 3 0 5 3 4 
1 9 8 1 5 9 
2 6 8 7 8 5 
3 2 8 1 6 4 
4 8 4 6 4 9 
5 1 6 8 8 1 
6 6 0 4 9 8 
7 0 9 2 6 7 
8 0 0 2 9 2 
9 6 0 9 6 0 

N = 3 
df = df.iloc[np.r_[0:N, -N:0]] 
print (df) 
    0 1 2 3 4 
0 3 0 5 3 4 
1 9 8 1 5 9 
2 6 8 7 8 5 
7 0 9 2 6 7 
8 0 0 2 9 2 
9 6 0 9 6 0 
2

你可以使用ilocrange

N = 3 
df.iloc[range(0, N) + range(-N, 0)] 

d etails

In [200]: df = pd.DataFrame(np.random.randn(10, 2)) 

In [201]: df 
Out[201]: 
      0   1 
0 -1.034025 0.222752 
1 0.102861 -0.827097 
2 1.218721 0.397002 
3 0.378780 1.903993 
4 0.931718 -1.086045 
5 1.608149 -0.233175 
6 -1.399926 -2.218517 
7 -0.411787 0.309623 
8 -0.493428 -1.834097 
9 -0.797647 -0.085315 

In [202]: N = 3 

In [203]: df.iloc[range(0, N) + range(-N, 0)] 
Out[203]: 
      0   1 
0 -1.034025 0.222752 
1 0.102861 -0.827097 
2 1.218721 0.397002 
7 -0.411787 0.309623 
8 -0.493428 -1.834097 
9 -0.797647 -0.085315 
+0

我得到的 - 不支持的操作数类型(S)为+: '范围' 和 '范围' – Dark

+1

它只能在'蟒蛇2',为Python 3需要范围转换成'list'像'DF。 iloc [list(range(0,N))+ list(range(-N,0))]' – jezrael