2016-04-25 39 views
1

我想通過子字符串來過濾Python數據框。在SQL中執行此操作非常簡單直接,但我很難將此邏輯轉換爲Python代碼。如何將此SQL語句轉換爲Python:MID? SUBSTRING?

這是SQL代碼:

SELECT * FROM [oe.data.0.Current] 
WHERE substring([series_id],5,2) = '50' 
OR substring([series_id],5,5) = '72400'; 

所以基本上我想在第5和第6個字符的位置,並通過9個字符位置上的第五特定字符值過濾「series_id」列。

我不明白MID或SUBSTRING如何轉換爲數據框。

如何在DataFrame中實現此SQL查詢的結果?

回答

1

你可以只是地圖,並使用lambda函數:

df[df['series_id'].map(lambda x: x[4:6]=='50' or x[4:9]=='72400')] 

有可能是一個更好的解決方案,但是這是我在類似案件中使用。

編輯

我發現還有另一種解決方案,它看起來更清潔對我來說,如果沒有別的。實際上熊貓有一些內置函數用於處理一系列字符串: http://pandas.pydata.org/pandas-docs/stable/text.html

在你的情況下,我認爲無論是包含函數 - 結合正則表達式還是切片函數都可以。例如:

df[(
    (df['series_id'].str.slice(4,5)=='50') | 
    (df['series_id'].str.slice(4,9)=='72400') 
)] 

或包含:

df[df['series_id'].str.contains(r'.{4}((50)|(72400))')] 
+1

好主意!但你必須糾正切片索引:'df [df ['series_id']。map(lambda x:x [4:6] =='50'or x [4:9] =='72400')]' – MaxU

+0

謝謝。我糾正了它。 – Tom83B