Python中pandas模糊查询为何不生效?求教

这条语句用于实现无论查找件号,还是查找描述,只要完全匹配,则后续通过 df.loc 列出结果,这个没问题 df['group'] = np.where((df['code'] == keystring) | (df['description'] == keystring), 'hit', 'nohit')

目前希望改进为,关键字的部分内容匹配序列中内容,就列出,相当于模糊查询,pycharm 没报错,但是不生效 df['group'] = np.where((keystring in df['code']) | (keystring in df['description']), 'hit', 'nohit')

求教问题出在哪里


Python中pandas模糊查询为何不生效?求教

4 回复

keystring in df[‘code’] 有点类似 ‘a’ in [‘a’, ‘b’,‘c’]

你需要的是 df[‘ocde’].str.contains(keystring)


问题分析: pandas模糊查询不生效通常是因为查询条件或方法使用不当。常见原因包括:未正确使用字符串方法(如str.contains())、未处理大小写或特殊字符、或查询对象非字符串类型。

解决方案示例: 以下是完整的代码示例,演示如何正确进行模糊查询:

import pandas as pd

# 示例数据
data = {'name': ['Alice Smith', 'Bob Johnson', 'Charlie Brown', 'David Lee']}
df = pd.DataFrame(data)

# 正确使用str.contains()进行模糊查询
# 查询包含"Smith"的行
result = df[df['name'].str.contains('Smith')]
print("包含'Smith'的结果:")
print(result)

# 处理大小写:使用case参数
result_ignore_case = df[df['name'].str.contains('smith', case=False)]
print("\n忽略大小写查询'smith'的结果:")
print(result_ignore_case)

# 使用正则表达式增强查询
result_regex = df[df['name'].str.contains('^C.*n$', regex=True)]  # 以C开头、以n结尾
print("\n正则表达式查询结果:")
print(result_regex)

关键点说明:

  1. 字符串方法:必须对Series使用.str访问器(如df['列名'].str.contains())。
  2. 大小写敏感:默认区分大小写,可通过case=False忽略。
  3. 正则表达式:默认启用正则表达式,特殊字符(如.*)需转义或设置regex=True
  4. 数据类型:确保查询列是字符串类型,可使用df['列名'].dtype检查。

一句话建议:检查是否使用了.str.contains()并注意大小写及正则表达式设置。

用这个试试看:

df[“code”].str.contains(keystring) | df[“description”].str.contains(keystring)

感觉两位的解释和纠正,已测,确实可行。

回到顶部