Pandas 基于索引条件的滤波器df

Pandas 基于索引条件的滤波器df,pandas,Pandas,我有一个有很多行的df: 13790226       0.320  0.001976     9895d5dis 182.600  0.040450      105066007     18.890  0.006432      109067019     52.500  0.034011      111845014     16.400  0.023974      11668574e      7.180  0.070714      113307021      4.110  

我有一个有很多行的df:

13790226       0.320  0.001976    
9895d5dis    182.600  0.040450     
105066007     18.890  0.006432     
109067019     52.500  0.034011     
111845014     16.400  0.023974     
11668574e      7.180  0.070714     
113307021      4.110  0.017514      
113679I37      8.180  0.010837     
我想过滤这个df,以便获得索引last char不是数字的行

所需df:

9895d5dis    182.600  0.040450
11668574e      7.180  0.070714
我怎么做

df['is_digit'] = [i[-1].isdigit() for i in df.index.values]
df[df['is_digit'] == False]
但我更喜欢正则表达式:

df[df.index.str.contains('[A-z]$')]

以下是一种简洁的方法,无需创建新的临时列:

df
                b         c
a                          
9895d5dis  182.60  0.040450
105066007   18.89  0.006432
109067019   52.50  0.034011
111845014   16.40  0.023974
11668574e    7.18  0.070714
113307021    4.11  0.017514
113679I37    8.18  0.010837

df[~df.index.str[-1].str.isnumeric()]
                b         c
a                          
9895d5dis  182.60  0.040450
11668574e    7.18  0.070714

您要筛选的列是索引还是列?如果它是一列

df1 = df[df[0].str.contains('[A-Za-z]')]
返回

    0           1       2
1   9895d5dis   182.60  0.040450
5   11668574e   7.18    0.070714
7   113679I37   8.18    0.010837 #looks like read_clipboard is reading 1 in 113679137 as I
如果是它的索引,首先做

df = df.reset_index()

将其加入混合物:

df.loc[[x for x in df.index if x[-1].isalpha()]]

很好地使用了你自己的名字@piRSquared,这就是我对regex的热爱:)我在之前的回答中使用了
'A-Za-z'
,纯粹是为了你的利益:-)我想说:)