我正在尝试通过子字符串过滤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查询的结果?
答案 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))')]