python - pandas dataframe字符串搜索 - “;”的问题?

时间:2016-04-02 12:34:21

标签: string python-3.x pandas dataframe

使用包含以下列的数据框:

Proteins
Q64HY3
G3UX74;G3UY42;Q8CCS6
Q8BKC5
O70209
Q8BG32;G3UYI4;G3UYL3

当我想要寻找字符串时我会去

df[df['Proteins'].str.contains('Users input', na=False)

当输入类似于'G3UX74'(第3行)时,以及'Q8CCS6'的输入非常正常,但如果我搜索示例';Q8CCS6'或完整字符串则不行:'G3UX74; G3UY42; Q8CCS6'

我对输入字符串的唯一作用是为可打印项目设置子集以删除不需要的空格:

no_space_in_string = sum(c.isprintable() for c in search_string)
search_string = search_string[:no_space_in_string]

所以我猜这是';'的问题。我可以实施警告,不要使用分号,但我希望它具有灵活性。

1 个答案:

答案 0 :(得分:0)

您总结了输入字符串中printable个字符的数量,因为isprintable返回True / False,在Python中表示为1/0:

In [107]: search_string
Out[107]: ';Q8CCS6'

In [108]: no_space_in_string = sum(c.isprintable() for c in search_string)

In [109]: no_space_in_string
Out[109]: 7

所以让我们这样试试吧:

In [112]: search_string = '; Q8CCS6'

In [113]: search_string.replace(' ', '')
Out[113]: ';Q8CCS6'

In [114]: search_string = search_string.replace(' ', '')

In [115]: search_string
Out[115]: ';Q8CCS6'

In [116]: df
Out[116]:
               Proteins
0                Q64HY3
1  G3UX74;G3UY42;Q8CCS6
2                Q8BKC5
3                O70209
4  Q8BG32;G3UYI4;G3UYL3

In [117]: df[df['Proteins'].str.contains(search_string, na=False)]
Out[117]:
               Proteins
1  G3UX74;G3UY42;Q8CCS6

说明:

In [135]: search_string = ';              Q8CCS6 '

In [136]: no_space_in_string = sum(c.isprintable() for c in search_string)

In [137]: no_space_in_string
Out[137]: 22

In [138]: search_string[:no_space_in_string]
Out[138]: ';              Q8CCS6 '

In [139]: ' '.isprintable()
Out[139]: True