检查数据框中字符串中是否包含空格的子字符串

问题描述 投票:0回答:2

我正在尝试根据字符串值删除包含字符串的行。为此,我正在寻找字符串中的特定子字符串。我的问题来自于这些子字符串包含空格,这似乎是我当前的过滤器没有考虑空格。

# List of substring to remove
searchfor = ['Value ', 'VALUE ', 'Value.', 'VALUE.']
# keeping only the rows with the substrings
df[df["""column"""].str.contains('|'.join(searchfor))]

但是,我仍然检索一些包含以下值的行: “XX值XXXXXX”

我相信空间应该删除那些但显然没有。

python pandas substring space
2个回答
0
投票

您的过滤器无法按预期工作的原因是,

str.contains()
方法认为字符串包含所需的子字符串,无论 sbustring 在大字符串中的位置如何。

要让过滤器仅考虑以搜索列表中的值开头的子字符串,您可以使用参数修改过滤器并使用

^
符号来指示字符串的开头

filtered_df=df[df["column"].str.contains('|'.join(searchfor), regex=True)]

0
投票

空间没有问题。问题是点(

.
)是正则表达式中的特殊字符,用于匹配任何字符。如果您想要字面匹配,请使用
\
转义字符:

searchfor = ['Value ', 'VALUE ', 'Value\.', 'VALUE\.'] # dots escaped

例如:

import pandas as pd

df = pd.DataFrame({'column': ['XXVALUEXXXXXX',
                              'XXVALUE.XXXXXX',
                              'XXValue XXXXXX']})

df

           column
0   XXVALUEXXXXXX # will no longer be matched
1  XXVALUE.XXXXXX
2  XXValue XXXXXX
searchfor = ['Value ', 'VALUE ', 'Value\.', 'VALUE\.']

df[df['column'].str.contains('|'.join(searchfor))]

           column
1  XXVALUE.XXXXXX
2  XXValue XXXXXX

或使用

re.escape
:

import re

searchfor = ['Value ', 'VALUE ', 'Value.', 'VALUE.']

escaped_searchfor = '|'.join([re.escape(elem) for elem in searchfor])

df[df['column'].str.contains(escaped_searchfor)]

           column
1  XXVALUE.XXXXXX
2  XXValue XXXXXX
© www.soinside.com 2019 - 2024. All rights reserved.