2017-02-08 8 views
1

は、私がデータフレーム内の隣接する列のセットを削除したいと言うと、私のコードは、現在、次のようになります。この作品削除複数のデータフレームの列が

del df['1'], df['2'], df['3'], df['4'], df['5'], df['6'] 

が、より多くがあった場合、私は思っていました以下のような、それを行うには、効率的でコンパクト、または美的方法:

del df['1','6'] 
+0

「drop」のみを使用する必要はないので、「range」または「np.arange」でいくつかのロジックが使用されているので質問を再度開きます。 – jezrael

答えて

0

私はあなたが選択するために使用される、drop必要があると思うrangeまたはnumpy.arange

df = pd.DataFrame({'1':[1,2,3], 
        '2':[4,5,6], 
        '3':[7,8,9], 
        '4':[1,3,5], 
        '5':[7,8,9], 
        '6':[1,3,5], 
        '7':[5,3,6], 
        '8':[5,3,6], 
        '9':[7,4,3]}) 

print (df) 
    1 2 3 4 5 6 7 8 9 
0 1 4 7 1 7 1 5 5 7 
1 2 5 8 3 8 3 3 3 4 
2 3 6 9 5 9 5 6 6 3 

print (np.arange(1,7)) 
[1 2 3 4 5 6] 

print (range(1,7)) 
range(1, 7) 

#convert string column names to int 
df.columns = df.columns.astype(int) 
df = df.drop(np.arange(1,7), axis=1) 
#another solution with range 
#df = df.drop(range(1,7), axis=1) 
print (df) 
    7 8 9 
0 5 5 7 
1 3 3 4 
2 6 6 3 
0

あなたはdropsliceオブジェクトを渡すことによって、列を変更せずにこれを行うことができます:

In [29]: 
df.drop(df.columns[slice(df.columns.tolist().index('1'),df.columns.tolist().index('6')+1)], axis=1) 

Out[29]: 
     7 8 9 
    0 5 5 7 
    1 3 3 4 
    2 6 6 3 

をこれは、カラムエンドポイントの下限と上限の順序位置を返し、これらを渡しますsliceオブジェクトを列配列に対して作成する

関連する問題