Pandas 基于索引条件的滤波器df
我有一个有很多行的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
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'
,纯粹是为了你的利益:-)我想说:)