2017-09-14 16 views
1

私は以下に示すようにpandas DataFrameを持っています。列 "final_ind"を除いて、 "_cd"または "_ind"で終わるすべての列を選択したいとします。どうやってやるの?ここで正規表現以外の文字列を含む列を選択する

df = pd.DataFrame({ 
    'var1': [20, 30.0, 40], 
    'var2_ind': ["a4", "a3", "b1"], 
    'var3_cd': [10, 5, 7], 
    'final_ind': [1, 0, 1], 
}) 

は、私が試したものです:

df.ix[:, df.columns.str.contains('_cd|_ind')] #Gets all columns except var1 
df.ix[:, df.columns.str.contains('_cd|_ind[^final_ind]')] #Gets only var3_cd 

答えて

3

あなたはとても似regexfilterを使用することができます。

df.filter(regex='^(?!final).*(_cd|_ind)$') 

# var2_ind var3_cd 
#0  a4  10 
#1  a3  5 
#2  b1  7 

  • ^(?!final)は、列名ドン」をアサートしますお返事ありがとうございますfinalネガティブ・ルックアヘッド(?!...);
  • .*(_cd|_ind)$は、_cdまたは_indで終わる列名と一致します。
2

negative look ahead RegExを使用せずに別の解決策:

In [24]: df[df.columns[df.columns.str.contains('(?:_cd|_ind)$')].drop('final_ind')] 
Out[24]: 
    var2_ind var3_cd 
0  a4  10 
1  a3  5 
2  b1  7 
+0

はWiktorStribiż[email protected]、はい、確かに、それを指摘してくれてありがとう! – MaxU

関連する問題