You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python报错:str与int不支持&运算符,pandas代码排查求助

问题分析与解决

报错原因

你遇到的unsupported operand type(s) for &: 'str' and 'int'错误,根源是错误地使用*解包列表作为str.contains()的参数。

pandas.Series.str.contains()的第一个参数是正则表达式字符串(pat),后续参数是关键字参数(如case、flags等,其中flags要求传入整数类型的正则标志,比如re.IGNORECASE)。当你用*connection_issue解包4个元素的列表时:

  • 第一个元素'load'被当作pat
  • 第二个元素'loading'被传给case参数(非空字符串会被转为布尔值True,暂时没问题)
  • 第三个元素'error loading'被传给flags参数,而flags需要整数,内部处理时尝试对字符串和整数做位运算&,直接触发类型错误

至于tablet的*tablet没报错,只是巧合:列表只有2个元素,第二个元素被传给case参数(转为True),没触及flags参数,但逻辑是错误的——它只会检查是否包含'ipad',而非'ipad'或'tablet'中的任意一个。

解决方案

要匹配列表中的任意关键词,正确的做法是用'|'.join()将列表转为正则表达式字符串(|表示正则中的“或”逻辑),传入str.contains()的pat参数。修正后的代码如下:

import numpy as np
import pandas as pd

tablet = ['ipad', 'tablet']
connection_issue = ['load', 'loading','error loading', 'connection issue']
blankQuestion = ['blank question', 'question loading', 'question does not load', 'question doesn\'t load','no question']
mocktest = ['mock test','mock tests']

# 将每个关键词列表转为正则或表达式
tablet_pat = '|'.join(tablet)
connection_pat = '|'.join(connection_issue)
mocktest_pat = '|'.join(mocktest)

df['bug_types'] = np.where(df['Ticket description'].str.contains(tablet_pat), 'tablet',
                  np.where(df['Ticket description'].str.contains(connection_pat), 'connectionz',
                  np.where(df['Ticket description'].isin(blankQuestion), 'blankQuestion',
                  np.where(df['Ticket description'].str.contains(mocktest_pat), 'mock tests', 'others'))))

额外说明

  • 如果关键词中包含正则特殊字符(比如.、*),需要先用re.escape()转义,避免正则匹配异常:
    import re
    connection_pat = '|'.join(map(re.escape, connection_issue))
    
  • isin()是检查整个字符串是否完全匹配列表中的元素,而str.contains()是检查字符串是否包含子串,两者逻辑不同,根据你的需求选择即可。

内容的提问来源于stack exchange,提问作者NNN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:06:32