2017-12-22 10 views
1

私はraw_dfというデータフレームを持っています。 最初の列がE01,E02、... E14の行が必要です。 手動で入力せずに、これを生成できるリストの理解度(または別の方法)を作成するにはどうすればよいですか。パンダの複数の増分条件節

row_data = raw_df.loc[ 
       (raw_df.col0=='E01') | (raw_df.col0=='E02') | 
       (raw_df.col0=='E03') | (raw_df.col0=='E04') | 
       (raw_df.col0=='E05') | (raw_df.col0=='E06') | 
       (raw_df.col0=='E07') | (raw_df.col0=='E08') | 
       (raw_df.col0=='E09') | (raw_df.col0=='E10') | 
       (raw_df.col0=='E11') | (raw_df.col0=='E12') | 
       (raw_df.col0=='E13') | (raw_df.col0=='E14') 
       ] 

私はそれがevalは、文字列のリスト内包を作って行うことができます知っているが、私はそれが&を使用すべきではない危険だということを理解しています。

同様に、setattrxx.yy=zのために動作しますが、あなたがSeriesまたはlist comprehension Sによって生成されたすべての値のlistisinを使用することができませんxx.yy==z

答えて

2

a = pd.Series(range(1, 15)).astype(str).str.zfill(2).radd('E') 
row_data = raw_df.loc[raw_df.col0.isin(a)] 

詳細:

print (a) 
0  E01 
1  E02 
2  E03 
3  E04 
4  E05 
5  E06 
6  E07 
7  E08 
8  E09 
9  E10 
10 E11 
11 E12 
12 E13 
13 E14 
dtype: object 

オルタナティブ:

a = ['E{:02d}'.format(x) for x in range(1, 15)] 
print (a) 
['E01', 'E02', 'E03', 'E04', 'E05', 'E06', 'E07', 
'E08', 'E09', 'E10', 'E11', 'E12', 'E13', 'E14'] 

Alternative2、感謝KPLauritzen

conditions = [f'E{x:02}' for x in range(1, 15)] 
+1

をとにも '条件としてリストを作成=範囲内のxの[f'E {x:02} '(1,15)] – KPLauritzen

+0

ありがとうございました。 – jezrael

1

ご利用の場合のためには、あなたはまた、正規表現を使用できます。

filtered = a[a.str.contains('E*')]