我有一个熊猫DataFrame,其中包含一列字符串值。我需要根据部分字符串匹配来选择行。

类似于这个成语:

re.search(pattern, cell_in_question) 

返回布尔值。我熟悉df[df['A']==“helloworld”]的语法,但似乎找不到一种方法来处理部分字符串匹配,比如“hello”。


当前回答

您可以尝试将它们视为字符串:

df[df['A'].astype(str).str.contains("Hello|Britain")]

其他回答

也许您想在Pandas数据帧的所有列中搜索一些文本,而不仅仅是在它们的子集中。在这种情况下,以下代码将有所帮助。

df[df.apply(lambda row: row.astype(str).str.contains('String To Find').any(), axis=1)]

警告这种方法虽然方便,但速度相对较慢。

您可以尝试将它们视为字符串:

df[df['A'].astype(str).str.contains("Hello|Britain")]

如果有人想知道如何执行相关问题:“按部分字符串选择列”

Use:

df.filter(like='hello')  # select columns which contain the word hello

若要通过部分字符串匹配来选择行,请将axis=0传递到筛选器:

# selects rows which contain the word hello in their index label
df.filter(like='hello', axis=0)  

对于包含特殊字符的字符串,使用contains效果不佳。尽管找到了工作。

df[df['A'].str.find("hello") != -1]

我的2c价值:

我执行了以下操作:

sale_method = pd.DataFrame(model_data['Sale Method'].str.upper())
sale_method['sale_classification'] = \
    np.where(sale_method['Sale Method'].isin(['PRIVATE']),
             'private',
             np.where(sale_method['Sale Method']
                      .str.contains('AUCTION'),
                      'auction',
                      'other'
             )
    )