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

类似于这个成语:

re.search(pattern, cell_in_question) 

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


当前回答

快速提示:如果要基于索引中包含的部分字符串进行选择,请尝试以下操作:

df['stridx']=df.index
df[df['stridx'].str.contains("Hello|Britain")]

其他回答

我在ipython笔记本电脑的macos上使用熊猫0.14.1。我尝试了上面的建议行:

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

并得到一个错误:

无法使用包含NA/NaN值的矢量进行索引

但当添加了“==True”条件时,效果非常好,如下所示:

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

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

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

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

这是我最后为部分字符串匹配所做的。如果有人有更有效的方法,请告诉我。

def stringSearchColumn_DataFrame(df, colName, regex):
    newdf = DataFrame()
    for idx, record in df[colName].iteritems():

        if re.search(regex, record):
            newdf = concat([df[df[colName] == record], newdf], ignore_index=True)

    return newdf

快速提示:如果要基于索引中包含的部分字符串进行选择,请尝试以下操作:

df['stridx']=df.index
df[df['stridx'].str.contains("Hello|Britain")]

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

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