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模糊查询为何不生效?求教
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)
关键点说明:
- 字符串方法:必须对Series使用
.str访问器(如df['列名'].str.contains())。 - 大小写敏感:默认区分大小写,可通过
case=False忽略。 - 正则表达式:默认启用正则表达式,特殊字符(如
.、*)需转义或设置regex=True。 - 数据类型:确保查询列是字符串类型,可使用
df['列名'].dtype检查。
一句话建议:检查是否使用了.str.contains()并注意大小写及正则表达式设置。
用这个试试看:
df[“code”].str.contains(keystring) | df[“description”].str.contains(keystring)
感觉两位的解释和纠正,已测,确实可行。

