pandas中的多个递增条件子句

时间:2017-12-22 11:36:17

标签: python pandas

我有一个名为raw_df的数据框。 我想要第一列包含E01E02,... 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完成字符串列表理解,但我知道这是危险的&不应该使用。

同样,setattr仅适用于xx.yy=z,但不适用于xx.yy == z

2 个答案:

答案 0 :(得分:2)

您可以list Serieslist comprehension生成的所有值isin使用KPLauritzen

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,谢谢{{3}}:

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

答案 1 :(得分:1)

对于您的用例,您还可以使用正则表达式:

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