pandas DataFrame字符串完全匹配

nfzehxib  于 2023-03-11  发布在  其他
关注(0)|答案(2)|浏览(199)

我正在使用str.contains方法查找数据框中的特定行,但是我希望找到完全匹配的字符串,即使添加regex = False,它似乎也会选择部分匹配。
str.find也不起作用,我是否应该为此使用另一个函数?下面是我需要它的代码片段:
下面是一些用于复制的代码

data = {'A':['tree','bush','forest','tree/red']}

df_test=pd.DataFrame(data)

df_test['New'] = np.where(df_test['A'].str.contains('tree', regex = False) |
                                   df_test['A'].str.contains('bush') |
                                   df_test['A'].str.contains('forest') 
    
                                   , 'Good', '')

因此,我想在上面的代码中只查找包含“tree”、“bush”或“forest”的行,但是它也会选择包含“tree/red”的行。

wfsdck30

wfsdck301#

您可以将str.contains^$标记一起使用:

df_test['New'] = np.where(df_test['A'].str.contains('^(?:tree|bush|forest)$', regex=True), 'Good', '')

还要注意,我们使用了一个带有交替的正则表达式模式来同时搜索所有关键字。

tvokkenx

tvokkenx2#

str.contains检查子字符串是否存在于字符串中,因此您可以使用复杂的正则表达式来获得所需的输出,也可以简单地找到其他方法。
下面是我会怎么做

import pandas as pd
data = {'A':['tree','bush','forest','tree/red']}
good = ['tree','bush','forest',]
df_test=pd.DataFrame(data)
df_test['New'] = df_test.apply(lambda row: 'Good' if row['A'] in good else 'Bad', axis=1)

相关问题