【问题标题】:Pandas series substring starts and ends with letterPandas 系列子字符串以字母开头和结尾
【发布时间】:2020-12-28 19:50:45
【问题描述】:

我有一个包含大约 50 万行这种形式的大型 pandas 系列:

pd.Series(['Lorem ipsum dolor sit amet',
            'consectetur adipiscing elit',
            'quis euismod mi, id venenatis urna',
            'curabitur vel augue viverra diam imperdiet laoreet'])

我想按以特定字母开头和结尾的单词过滤系列。例如,如果起始字母是“l”,结束字母是“m”,那么我想包含具有“lorem”作为子字符串的行,或者更确切地说是“^l.*m$”。

所以我需要将我的字符串拆分为子字符串并执行 .str.contains('^l.*m$'),但是我不知道如何优化。

【问题讨论】:

  • 你可以用\bl\w*m\b匹配单词
  • @Thefourthbird,你能提供一个答案吗?我尝试了 s.str.contains('\bL\w*m\b') 并且没有得到任何匹配,当我应该得到包含 Lorem 的第 0 行时。
  • 试试这个print(s.str.contains(pat = r'\bL\w*m\b', regex = True))
  • @Thefourthbird,这行得通,谢谢。你知道表演是什么吗?我想知道它将如何处理大量数据。
  • 很遗憾,我没有关于性能的答案。

标签: regex pandas string filter


【解决方案1】:

您可以使用从 L 到 m \bL\w*m\b 之间的单词边界匹配以及匹配 0 个或多个单词字符。

import pandas as pd

s = pd.Series(['Lorem ipsum dolor sit amet',
           'consectetur adipiscing elit',
           'quis euismod mi, id venenatis urna',
           'curabitur vel augue viverra diam imperdiet laoreet'])
s = s.str.contains(pat = r'\bL\w*m\b', regex = True)
print(s)

输出

0     True
1    False
2    False
3    False
dtype: bool

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2021-02-08
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多