我有一个名为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
完成字符串列表理解,但我知道这是危险的&不应该使用。
同样,setattr
仅适用于xx.yy=z
,但不适用于xx.yy
== z
答案 0 :(得分:2)
您可以list
Series
或list 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*')]