Pandas text matching like SQL's LIKE?

后端 未结 3 1604
心在旅途
心在旅途 2020-12-25 11:37

Is there a way to do something similar to SQL\'s LIKE syntax on a pandas text DataFrame column, such that it returns a list of indices, or a list of booleans that can be use

相关标签:
3条回答
  • 2020-12-25 12:08

    You can use the Series method str.startswith (which takes a regex):

    In [11]: s = pd.Series(['aa', 'ab', 'ca', np.nan])
    
    In [12]: s.str.startswith('a', na=False)
    Out[12]: 
    0     True
    1     True
    2    False
    3    False
    dtype: bool
    

    You can also do the same with str.contains (using a regex):

    In [13]: s.str.contains('^a', na=False)
    Out[13]: 
    0     True
    1     True
    2    False
    3    False
    dtype: bool
    

    So you can do df[col].str.startswith...

    See also the SQL comparison section of the docs.

    Note: (as pointed out by OP) by default NaNs will propagate (and hence cause an indexing error if you want to use the result as a boolean mask), we use this flag to say that NaN should map to False.

    In [14]: s.str.startswith('a')  # can't use as boolean mask
    Out[14]:
    0     True
    1     True
    2    False
    3      NaN
    dtype: object
    
    0 讨论(0)
  • 2020-12-25 12:16
    1. To find all the values from the series that starts with a pattern "s":

    SQL - WHERE column_name LIKE 's%'
    Python - column_name.str.startswith('s')

    1. To find all the values from the series that ends with a pattern "s":

    SQL - WHERE column_name LIKE '%s'
    Python - column_name.str.endswith('s')

    1. To find all the values from the series that contains pattern "s":

    SQL - WHERE column_name LIKE '%s%'
    Python - column_name.str.contains('s')

    For more options, check : https://pandas.pydata.org/pandas-docs/stable/reference/series.html

    0 讨论(0)
  • 2020-12-25 12:18

    you can use

    s.str.contains('a', case = False)
    
    0 讨论(0)
提交回复
热议问题