pandas中的多个递增条件子句

2024-09-22 10:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为raw\u 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


Tags: 数据df列表dataraw键入方式手动
2条回答

您可以使用由Serieslist comprehension生成的所有值的^{}by list

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']

备选方案2,谢谢KPLauritzen

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

对于您的用例,还可以使用regexp:

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

相关问题 更多 >