如何将此SQL语句转换为Python:MID? SUBSTRING?

时间:2016-04-25 19:54:46

标签: python sql pandas dataframe substring

我正在尝试通过子字符串过滤Python DataFrame。在SQL中执行此操作非常简单明了,但我很难将此逻辑转换为Python代码。

这是SQL代码:

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

所以基本上我想用第5和第6个字符位置以及第5到第9个字符位置的特定字符值过滤'series_id'列。

我不明白MID或SUBSTRING如何转换为DataFrame。

如何在DataFrame中实现此SQL查询的结果?

1 个答案:

答案 0 :(得分:1)

您只需映射它并使用lambda函数:

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

可能有更好的解决方案,但这是我在类似情况下使用的方法。

修改

我发现还有另一个解决方案,对我来说看起来更干净,如果没有其他的话。 Pandas实际上有一些内置函数来处理一系列字符串: 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))')]