根据索引条件过滤df

时间:2017-06-06 16:04:02

标签: 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  0.017514      
113679I37      8.180  0.010837     

我想过滤此df以获取索引最后一个字符不是数字的行

所需的df:

9895d5dis    182.600  0.040450
11668574e      7.180  0.070714

我该怎么做?

4 个答案:

答案 0 :(得分:3)

df['is_digit'] = [i[-1].isdigit() for i in df.index.values]
df[df['is_digit'] == False]

但我更喜欢正则表达式:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

您要过滤的列是索引还是列?如果它是一列

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()

答案 3 :(得分:0)

把它扔进混合物中:

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