【问题标题】:How to convert this SQL statement into Python: MID? SUBSTRING?如何将此 SQL 语句转换为 Python:MID?子串?
【发布时间】:2016-08-19 09:26:26
【问题描述】:

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

【问题讨论】:

    标签: python sql pandas dataframe substring


    【解决方案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

    在您的情况下,我认为 contains 函数 - 与正则表达式结合使用,或者 slice 函数都可以很好地工作。示例:

    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))')]
    

    【讨论】:

    • 好主意!但您必须更正切片索引:df[df['series_id'].map(lambda x: x[4:6]=='50' or x[4:9]=='72400')]
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多