认为这将是直接的,但在追踪优雅的方式来同时搜索数据框中的所有列以进行部分字符串匹配时遇到了一些麻烦.基本上我将如何同时应用于df['col1'].str.contains('^')整个数据框并过滤到包含匹配记录的任何行?
unu*_*tbu 32
该Series.str.contains方法需要一个正则表达式模式(默认情况下),而不是文字字符串.因此str.contains("^")匹配任何字符串的开头.由于每个字符串都有一个开头,所以一切都匹 而是str.contains("\^")用来匹配文字^字符.
要检查每一列,您可以使用for col in df迭代列名称,然后调用str.contains每列:
mask = np.column_stack([df[col].str.contains(r"\^", na=False) for col in df])
df.loc[mask.any(axis=1)]
Run Code Online (Sandbox Code Playgroud)
或者,您可以传递regex=False给str.contains测试使用Python in运算符; 但(一般情况下)使用正则表达式更快.
Pun*_*nha 18
试试:
df.apply(lambda row: row.astype(str).str.contains('TEST').any(), axis=1)
Run Code Online (Sandbox Code Playgroud)
这是一个解决在数据框的所有列中进行文本搜索的问题的函数df:
def search(regex: str, df, case=False):
"""Search all the text columns of `df`, return rows with any matches."""
textlikes = df.select_dtypes(include=[object, "string"])
return df[
textlikes.apply(
lambda column: column.str.contains(regex, regex=True, case=case, na=False)
).any(axis=1)
]
Run Code Online (Sandbox Code Playgroud)
它与现有答案的不同之处在于,它既保留在 pandas API 中,又承认 pandas 在列处理方面比行处理更有效。此外,这被打包为一个纯函数:-)
相关文档:
| 归档时间: |
|
| 查看次数: |
44185 次 |
| 最近记录: |