2014-10-09 73 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