2016-02-25 113 views
1

我有一個DataFrame,其中的列是MultiIndex,索引是一個名稱列表,例如index=['Andrew', 'Bob', 'Calvin',...]熊貓 - 過濾器和正則表達式搜索DataFrame的索引

我想創建一個函數來返回使用名稱'Bob'或可能以字母'A'開頭或以小寫字母開頭的數據框的所有行。如何才能做到這一點?

我看着df.filter()用正則表達式的說法,但它失敗,我得到:

df.filter(regex='a') 
TypeError: expected string or buffer 

或:

df.filter(regex=('a',1) 
TypeError: first argument must be string or compiled pattern 

我嘗試過其他的東西,如通過re.compile('a')無濟於事。

+0

同樣的問題,沒有什麼新的 – Shatnerz

+0

http://stackoverflow.com/questions/15325182/how-to-filter-rows-in-pandas-by-正則表達式 – gsamaras

+0

在這個例子中,他們正在過濾列,索引默認爲[0,1,2,3]。我的索引是一個名稱列表。 – Shatnerz

回答

3

也許嘗試了不同的方法,通過使用列表中理解和.IX:

import pandas as pd 

df = pd.DataFrame(range(4),index=['Andrew', 'Bob', 'Calvin','yosef']) 

df.ix[[x for x in df.index if x=='Bob']] 

df.ix[[x for x in df.index if x[0]=='A']] 

df.ix[[x for x in df.index if x.islower()]] 
+0

謝謝你回答我的問題。任何想法,如果有人使用'df.filter'?看到一些例子會很高興。這很好,但是之後我需要分別處理搜索使我的代碼更簡潔的列 – Shatnerz

2

所以它看起來像我的問題filter的部分是,我用熊貓的過時的版本。更新後,我不再得到TypeError。經過一番玩,看起來我可以用filter來滿足我的需求。這是我發現的。

只需設置df.filter(regex='string')將返回匹配正則表達式的列。這看起來與df.filter(regex='string', axis=1)一樣。

要搜索的索引,我只是需要做df.filter(regex='string', axis=0)