首页 > 解决方案 > 函数中带有字符串模式的Python过滤数据框

问题描述

我是 Python 新手,我正在尝试编写一个函数来使用搜索过滤数据框,该搜索将应用于应用程序。我想在字符串的开头搜索特定模式的字符串。

目前,我已经成功实现了这一点,但仅适用于包含模式的字符串,字符串中的任何位置。这是我的代码:

sequence = [["TTTGCGAAA", "ref"], ["TTTGGGAAA", "ref"], ["TTGGGGTTT", "iso"], ["TTAGGGAAA", "iso"], ["TATGGGAAA", "iso"]]  
df = pd.DataFrame(sequence, columns=["sequence", "mapping"])  

def search_table(search):  
    filtered_df = df[df['sequence'].str.contains(search)]
    print(filtered_df)

search_table("TTT")
output:
    sequence mapping
0  TTTGCGAAA     ref
1  TTTGGGAAA     ref
2  TTGGGGTTT     iso

但这^并不是我想要的。我想要的输出如下:

    sequence mapping
0  TTTGCGAAA     ref
1  TTTGGGAAA     ref

我看过reg express,但我一点也没有成功。有人可以帮助我或建议我可以尝试哪些功能吗?

标签: pythonstring

解决方案


只需添加 ^str.contains 方法

    def search_table(search):  
        filtered_df = df[df['sequence'].str.contains('^'+search)]
        print(filtered_df)

这是行首的正则表达式符号。默认情况下,str.contains接受正则表达式。

值得学习有关正则表达式的手册和教程,因为它在很多情况下都非常有帮助,甚至在其他语言中也是如此。

您的问题的另一种可能性是使用:

    df[df.sequence.str.contains('^('+yourpattern+'){'+N+'}')]

where^表示行首,('yourpattern'){N}表示'yourpattern' N 次,yourpattern 为字符串,N 为整数


推荐阅读