2016-05-30 5 views
2

私はプログラミングが初めてで、私の研究でより効率的に実行するいくつかのタスクを実行するためにpythonを学習しました。私はpandasモジュールでPCAを実行しています(私はチュートリアルをオンラインで見つけました)。このためのスクリプトがありますが、pcaの前にデータフレームの一部を副選択する必要があります。パンダのデータフレームのサブ選択

これまでのところ、私は(ちょうど例えば、現実には、私は大きなマトリックスと.csvファイルを読んでいます)

x = np.random.randint(30, size=(8,8)) 
df = pd.DataFrame(x) 

    0 1 2 3 4 5 6 7 
0 9 0 23 13 2 5 14 6 
1 20 17 11 10 25 23 20 23 
2 15 14 22 25 11 15 5 15 
3 9 27 15 27 7 15 17 23 
4 12 6 11 13 27 11 26 20 
5 27 13 5 16 5 5 2 18 
6 3 18 22 0 7 10 11 11 
7 25 18 10 11 29 29 1 25 

私が何をしたいのかはいずれにも一定の基準を満たすサブ選択列である必要があり行で、特に私は、少なくとも1つの番号=> 27(ちょうど例えば)

0 1 3 4 5 
0 9 0 13 2 5 
1 20 17 10 25 23 
2 15 14 25 11 15 
3 9 27 27 7 15 
4 12 6 13 27 11 
5 27 13 16 5 5 
6 3 18 0 7 10 
7 25 18 11 29 29 

私はパンダのさまざまなスライス法に見ている新しいデータフレームを生成するために持っているすべての列をしたいが、どれもやるように見えるん私が望むもの(.locと.ilocなど)。

私はこれまでに読み取るために使用している実際のスクリプトはそうxのサブdataframme私は(上記のように)の後午前何

filename = 'Data.csv' 
data = pd.read_csv(filename,sep = ',') 
x = data.ix[:,1:] # variables - species 
y = data.ix[:,0] # cases - age 

あります。

アドバイスをいただければ幸いです。

答えて

1

などのインデクサloc,ilocixなどのインデクサはブール値配列を受け入れます。たとえば、3つの列がある場合、df.loc[:, [True, False, True]]はすべての行と列0と2を返します(対応する値がTrueの場合)。 によって、列の要素のいずれかが27以上であるかどうかを確認できます。これは少なくとも1つの値> = 27を持つ列に対してTrueを返します。だから、あなたがデータフレームをスライスすることができます

df.loc[:, (df>=27).any()] 
Out[34]: 
    0 1 3 4 5 7 
0 8 2 28 9 14 21 
1 24 26 23 17 0 0 
2 3 24 7 15 4 28 
3 29 17 12 7 7 6 
4 5 3 10 24 29 14 
5 23 21 0 16 23 13 
6 22 10 27 1 7 24 
7 9 27 2 27 17 12 

そして、これが最初のデータフレームである:

df 
Out[35]: 
    0 1 2 3 4 5 6 7 
0 8 2 7 28 9 14 26 21 
1 24 26 15 23 17 0 21 0 
2 3 24 26 7 15 4 7 28 
3 29 17 9 12 7 7 0 6 
4 5 3 13 10 24 29 22 14 
5 23 21 26 0 16 23 17 13 
6 22 10 19 27 1 7 9 24 
7 9 27 26 2 27 17 8 12 
関連する問題