2013-02-25 13 views
16

私はこれらのコラムのスライス方法について知っている:キープ/スライス特定の列

df2 = df[["col1", "col2", "col3"]]df2 = df.ix[:,0:2]

が、目の前/中/終了から列をスライスする方法がある場合、私は思ったんだけど同じスライス内のデータフレームは、それぞれを個別にリストすることなく記録されます。

たとえば、カラムcol1、col2、col3、col4、col5、およびcol6のデータフレームdf

このような方法がありますか?

df2 = df.ix[:, [0:2, "col5"]]

私は何百もの列を持ち、日常異なる要求のための具体的なものをスライスする必要がある状況にいますよ。私はドキュメントをチェックして、このようなものを見ていない。私は何か見落としたことがありますか?

ありがとうございます!

*私が探しているものがより明確になるように編集されました。

答えて

14

IIUC、私の最も簡単な方法の関数を書くことができような何かを行うことができますそうでない場合Indexオブジェクトは自身を、追加のベクトルにしようとしますので、list呼び出しはオプションではありません

>>> import pandas as pd 
>>> import numpy as np 
>>> df = pd.DataFrame(np.random.randn(5, 10)) 
>>> df[list(df.columns[:2]) + [7]] 
      0   1   7 
0 0.210139 0.533249 1.780426 
1 0.382136 0.083999 -0.392809 
2 -0.237868 0.493646 -1.208330 
3 1.242077 -0.781558 2.369851 
4 1.910740 -0.643370 0.982876 

:このようなものになるだろうと考えることができますそれがトラブルの価値があるかどうかはわからないが、7

これは、特殊なケースにnumpyののr_よう

df[col_[:2, "col5", 3:6]] 

がうまくいくようなものことは可能であろう。

-1

あなたが何を求めているのかよく分かりません。あなたが特定の列の最初と最後の5行をしたい場合は、この

df = pd.DataFrame({'col1': np.random.randint(0,3,1000), 
       'col2': np.random.rand(1000), 
       'col5': np.random.rand(1000)}) 
In [36]: df['col5'] 
Out[36]: 
0  0.566218 
1  0.305987 
2  0.852257 
3  0.932764 
4  0.185677 
... 
996 0.268700 
997 0.036250 
998 0.470009 
999 0.361089 
Name: col5, Length: 1000 
In [38]: df['col5'][(df.index < 5) | (df.index > (len(df) - 5))] 
Out[38]: 
0  0.566218 
1  0.305987 
2  0.852257 
3  0.932764 
4  0.185677 
996 0.268700 
997 0.036250 
998 0.470009 
999 0.361089 
Name: col5 

あるいは、より一般的に、あなたは

In [41]: def head_and_tail(df, n=5): 
    ...:  return df[(df.index < n) | (df.index > (len(df) - n))] 
In [44]: head_and_tail(df, 7) 
Out[44]: 
    col1  col2  col5 
0  0 0.489944 0.566218 
1  1 0.639213 0.305987 
2  1 0.000690 0.852257 
3  2 0.620568 0.932764 
4  0 0.310816 0.185677 
5  0 0.930496 0.678504 
6  2 0.165250 0.440811 
994  2 0.842181 0.636472 
995  0 0.899453 0.830839 
996  0 0.418264 0.268700 
997  0 0.228304 0.036250 
998  2 0.031277 0.470009 
999  1 0.542502 0.361089 
+0

私が探しているのは、データフレーム内の特定の列を「保持」し、残りを除外する方法です。あなたが提案したメソッドは、任意の列のデータフレームの最初と最後の**行**を選択するのに適していますが、スライス内の列の組み合わせ/リストを使用して列を保持/削除する方法です。 – bdiamante

+0

そのため、最初の5行と最後の5行の代わりに、これらの行を除外する方法が必要ですか?興味のあるサブセットを示す小さなデータフレームで具体的な例を挙げてください。 – beardc

4

フィルタリングできる情報がカラム名にある場合は、df.filter(regex = 'name *')を使用できます。 私は181のデータチャンネルをa1_01からb3_21までの間でフィルタリングするためにこれを使用しています。