2014-10-09 76 views
0

由行标签采取DF的子集,我有DF,看起来像这样:大熊猫的Python:在使用re.IGNORECASE

print df_raw 

Name    exp1 
Name     
UnweightedBase 1364 
Base    1349 
BFC_q5a1  34.18% 
BFC_q5a2   2.93% 
BFC_q5a3   1.86% 
BFC_q5a4   1.93% 
BFC_q5a5   0.84% 

我想从数据框上面建立然而使用行标签集,我是喜欢使用re.IGNORECASE,但我不知道如何。

没有re.IGNORECASE的代码如下所示:

subset_df = df_raw.loc[df_raw.index.isin(['BFC_q5a4', 'BFC_q5a5'])] 

我怎样才能改变我的代码利用re.IGNORECASE为下面的代码:

subset_df = df_raw.loc[df_raw.index.isin(['bFc_q5A4', 'BfC_Q5a5'])] 

笔记 - 这不是我不想使用str.lower或str.upper来执行此操作。

谢谢!

回答

1

我不知道任何用大小写不敏感的方式搜索索引标签的方法(df.filter很有用,但似乎不能忽略大小写)。

要解决这个问题,你可以利用一系列方法pd.Series.str.contains的这可以忽略大小写:

subset_df = df[pd.Series(df.index).str.contains(regex, case=False).values] 

该指数是在一个系列转身,然后应用正则表达式匹配。在这种情况下,regex可能类似于'bFc_q5A4|BfC_Q5a5'。案例被忽略(使用case=False)。

+0

这是一个好主意。我会试试看看它是如何发展的。谢谢! – 2014-10-09 16:32:12

+0

@ Boosted_d16没问题!希望代码实现你所需要的。 – 2014-10-09 21:20:17

+0

我想你可以使用select方法在索引中应用一个过滤器:'df_raw.select(my_list_of_rows中的lambda r:r.lower)' – 2014-10-10 04:53:23