2016-04-25 53 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