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

类似于这个成语:

re.search(pattern, cell_in_question) 

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


当前回答

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

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)  

其他回答

一个更一般的例子-如果在字符串中查找单词或特定单词的部分:

df = pd.DataFrame([('cat andhat', 1000.0), ('hat', 2000000.0), ('the small dog', 1000.0), ('fog', 330000.0),('pet', 330000.0)], columns=['col1', 'col2'])

句子或单词的特定部分:

searchfor = '.*cat.*hat.*|.*the.*dog.*'

创建显示受影响行的列(可以根据需要过滤掉)

df["TrueFalse"]=df['col1'].str.contains(searchfor, regex=True)

    col1             col2           TrueFalse
0   cat andhat       1000.0         True
1   hat              2000000.0      False
2   the small dog    1000.0         True
3   fog              330000.0       False
4   pet 3            30000.0        False

矢量化字符串方法(即Series.str)允许您执行以下操作:

df[df['A'].str.contains("hello")]

这在熊猫0.8.1及以上版本中可用。

df[df['A'].str.contains("hello", case=False)]

有点类似于@cs95的答案,但这里不需要指定引擎:

df.query('A.str.contains("hello").values')

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

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

并得到一个错误:

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

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

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