2017-11-14 5 views
1

これまでのところ、データフレームに存在するすべての列名のリストを取得したり、そのデータ型に基づいて特定の列名を取得したりできました。開始文字などPython - Panda Dataframeの列のリストから列名を動的に除外する方法

私の要件は、列名またはサブリストの全リストを取得し、そこから1つの列を除外することです(ターゲット変数/ラベル列)。これは機械学習の一部です。機械学習で使用されている用語を使用しています)

ご注意ください。これらの列にあるデータについては言及していません。私は、列名を取って、より良く理解するための例は、以下を参照してください

その名前で特定の列を除外したいのです:

私は上記のコマンドの両方を引いています残りのカラム名を取得するINORDER今
# Get all the column names from a Dataframe 
df.columns 

Index(['transactionID', 'accountID', 'transactionAmountUSD', 
     'transactionAmount', 'transactionCurrencyCode', 
     'accountAge', 'validationid', 'LABEL'], 
     dtype='object') 

# Get only the Numeric Variables (Columns with numeric values in it) 
df._get_numeric_data().columns 

Index(['transactionAmountUSD', 'transactionAmount', 'accountAge', 'LABEL'], 
     dtype='object') 

string_cols = list(set(list(df.columns))-set(df._get_numeric_data().columns)) 

これをヒットするまで、すべてうまくいく。

ラベルの列には数値がありますが、数値変数のリストには存在しないはずです。それは除外すべきです。

(すなわち)は、私は次のようなもののような無駄だったようなステートメントを試してみました

(リスト内のインデックスを使用しますが、明示的にその名を使用していない)特定のカラム名を除外したいです。これに関するすべての入力は役に立ちます

set(df._get_numeric_data().columns-set(df.LABEL) 
set(df._get_numeric_data().columns-set(df.LABEL.column) 
set(df._get_numeric_data().columns-set(df['LABEL']) 

私は非常に基本的なものを見逃していますが、それを理解することはできません。

答えて

1

まず第一に、あなたはすべての

pd.DataFrame.select_dtypes(exclude=[np.number]) 

    transactionID accountID transactionCurrencyCode validationid 
0    a   a      a   a 
1    a   a      a   a 
2    a   a      a   a 
3    a   a      a   a 
4    a   a      a   a 

セカンドではるかに単純にすべての数値列を除外することができ、列を削除するには、多くの方法があります。See this post

df._get_numeric_data().drop('LABEL', 1) 

    transactionAmountUSD transactionAmount accountAge 
0      1     1   1 
1      1     1   1 
2      1     1   1 
3      1     1   1 
4      1     1   1 

あなたが本当に列を望んでいた場合は、[はいpd.Index.difference

df._get_numeric_data().columns.difference(['LABEL']) 

Index(['accountAge', 'transactionAmount', 'transactionAmountUSD'], dtype='object') 

セットアップ

df = pd.DataFrame(
    [['a', 'a', 1, 1, 'a', 1, 'a', 1]] * 5, 
    columns=[ 
     'transactionID', 'accountID', 'transactionAmountUSD', 
     'transactionAmount', 'transactionCurrencyCode', 
     'accountAge', 'validationid', 'LABEL'] 
) 
+1

ここでいくつかの素晴らしいトリック、共有ありがとう。 –

+0

ようこそ@andrew_reece( - : – piRSquared

+0

素晴らしいです。ありがとうございます@piRSquared – JKC

1

パンダインデックスは、あなただけの私は、これは何であると思いますあなたに

Index(['a', 'c', 'd', 'e', 'f'], dtype='object') 

を返します

import pandas as pd 
df = pd.DataFrame(columns=list('abcdef')) 
print(df.columns.difference({'b'})) 

ような何かを書くことができますので、列のインデックスから1列を除外するために、一連の操作をサポートしていますwant:

+0

を使用しています。良いもの。ありがとうございました。 upvoting – JKC

1

出力としてLABEL列を、入力として他の機能を考慮すると、これを試すことができます:

feature_names = [x for x in df._get_numeric_data().columns if x not in ['LABEL']] 
input = df[feature_names] 
output= df['LABEL'] 

これが役に立ちます。

+0

ありがとう@ janu777いいです。 – JKC

+0

あなたは歓迎です:) – janu777

関連する問題