2014-10-09 1 views
0

У меня есть ФР, который выглядит следующим образом:Панды 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% 

Я хочу построить подмножество из dataframe выше, используя заголовки строк, однако, я был как использовать 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

Это хорошая идея. Я попробую и посмотрю, как это происходит. благодаря! –

+0

@ Boosted_d16 Нет проблем! Надеюсь, что код достиг того, что вам нужно. –

+0

Я думаю, вы можете использовать метод select для применения фильтра к индексу: 'df_raw.select (lambda r: r.lower в my_list_of_rows)' –

 Смежные вопросы

  • Нет связанных вопросов^_^