2016-08-23 167 views
2

匹配的字符串考慮以下數據幀大熊貓數據框中獲取根據排在細胞

+-----+----------------+--------+---------+ 
|  |  A  |  B | C | 
+-----+----------------+--------+---------+ 
| 0 | [email protected] | 2.0 | Hello | 
| 1 | [email protected] | 3.0 | World | 
| 2 | [email protected] | hi  | holiday | 
+-----+----------------+--------+---------+ 

如何,我可以得到其中re.compile([Hh](i|ello))將匹配在單元格中的所有行?也就是說,從上面的例子中,我想得到以下輸出:

+-----+----------------+--------+---------+ 
|  |  A  | B | C | 
+-----+----------------+--------+---------+ 
| 0 | [email protected] | 2.0 | Hello | 
| 2 | [email protected] | hi  | holiday | 
+-----+----------------+--------+---------+ 

我無法爲此獲得解決方案。和幫助將非常感激。

回答

2

您可以使用帶正則表達式的findall函數。

msk = df.apply(lambda x: x.str.findall(r'[Hh](i|ello)')).any(axis=1) 
df[msk] 

+---|------------|------|---------+ 
| |  A  | B | C | 
+---|------------|------|---------+ 
| 0 |[email protected]| 2 | Hello | 
| 2 |[email protected]| hi | holiday | 
+---|------------|------|---------+ 

any(axis=1)將檢查給定行中的任何列是否爲真。所以msk是True/False值的單列,指示在該行中是否找到正則表達式。

+0

謝謝你,這是我最終使用。 (並且道歉接受那個遲到!) – dliv

3

使用stack避免apply

df.loc[df.stack().str.match(r'[Hh](i|ello)').unstack().any(1)] 

enter image description here

使用match產生未來的警告。警告與我們正在做的事情是一致的,所以這很好。然而,findall完成相同的事情

df.loc[df.stack().str.findall(r'[Hh](i|ello)').unstack().any(1)] 
+0

也謝謝你的回答! – dliv