web-dev-qa-db-ja.com

python pandas頭と尾の両方を選択

パンダのデータフレームの場合、最初の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

最初の牽引行と最後の牽引行を表示するにはどうすればよいですか?

10
fu xue

ilocnumpy.r_

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
14
jezrael

df.head(5)およびdf.tail(5)を使用して、最初の5つと最後の5つを取得できます。オプションで、新しいデータフレームとappend()の頭と尾を作成できます。

new_df = df.tail(5)
new_df = new_df.append(df.head(5))
8
Linas Fx

小さなシンプルな機能:

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.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)
5
ic_fl2

同じ質問ではないかなりしかし、もしあなたが単にshowしたい場合/下5行(たとえば、jupyterのdisplayまたは通常のprintを使用して、 pd.option_context コンテキストを使用する場合、これよりも簡単な方法があります。

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

出力:

           0         1         2
0  -0.649105 -0.413335  0.374872
1   3.390490  0.552708 -1.723864
2  -0.781308 -0.277342 -0.903127
3   0.433665 -1.125215 -0.290228
4  -2.028750 -0.083870 -0.094274
..       ...       ...       ...
95  0.443618 -1.473138  1.132161
96 -1.370215 -0.196425 -0.528401
97  1.062717 -0.997204 -1.666953
98  1.303512  0.699318 -0.863577
99 -0.109340 -1.330882 -1.455040

[100 rows x 3 columns]
4
Bolster

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))の場合

ノート:

  1. もちろん、上記のdisplayprintに変更することで、同じものをテキストとして印刷できます。
  2. UNIXライクなシステムでは、上記の関数を_~/.ipython/profile_default/startup_のpyまたはipyファイルに記述して、すべてのノートブックでオートロードできます こちら =。
1
watsonic

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))と同じになります。

0
You Oneandzero

df.head(2)とdf.tail(2)を使用できます

0
Subhash Moond