Python3:遇到的报错解决方法大全(持续更新)

1. 错误SyntaxError: invalid syntax的解决办法

今天运行下面这个代码

def  loadDataSet():  
    return [[1,3,4],[2,3,5],[1,2,3,5],[2,5],[1],[3],[2,3],[1,3],[1,2,3,4],[2,4]]

报了这个错误:SyntaxError: invalid syntax


  File "<ipython-input-14-332fa655c8dd>", line 1
    ef  loadDataSet():
                  ^
SyntaxError: invalid syntax

感觉很奇怪,看了半天感觉没有语法错误
我就仔细检查检查发现
原来def与loadDataSet之间的空格多敲了一个,删掉多余的一个空格之后,就正常了
所以,遇到这个错误一定要仔细检查语法,看括号是否一一对应,冒号是否应该有,缩进是否对,空格是否正确等

2. AttributeError: module ‘seaborn’ has no attribute 'dislplot’的解决方法

出现这种错误一般就是库的版本不对,更新就可以了,我是在conda里面更新的,使用下面的语句,记录一下。
pip install --upgrade seaborn #更新seaborn版本就可以调用seaborn里面的库了

3. 错误’dict’ object has no attribute ‘has_key’ 的解决办法

在python3中运行如下代码出现’dict’ object has no attribute ‘has_key’ 错误

if not subsetCount.has_key(subset):

原因是在python3中删除了has_key这个函数,在python2版本是可以正常运行的,所以在python3中想实现这个功能要把代码改成如下的形式:

if not subset in subsetCount:

4. AttributeError: ‘float’ object has no attribute ‘rint’

DataFrame中的object对象使用.round()方法会报错:AttributeError: ‘float’ object has no attribute ‘rint’

遇到这样的报错,采取如下措施:

data4Stock_5minutes[‘OPEN’] = data4Stock_5minutes[‘OPEN’].astype(float)

便能解决问题。即转换一下数据的类型就可以了

5. 报错:RuntimeWarning: invalid value encountered in less_equal

对于所有涉及np.nan的比较,它将输出False。 让我们确认一下,以进行广播比较。 这是一个示例:

In [1]: A = np.array([4, 2, 1])

In [2]: B = np.array([2, 2, np.nan])

In [3]: A[:,None] <= B
RuntimeWarning: invalid value encountered in less_equal
Out[3]: 
array([[False, False, False],
       [ True,  True, False],
       [ True,  True, False]], dtype=bool)

请注意输出中的第三列,该列与包含B中第三个元素np.nan的比较相对应,并导致所有False值。

绘图的数据中有控制,所以会报这种错误

6. ValueError: Length mismatch: Expected axis has 1 elements, new values have 124 elements

7. TypeError: ufunc ‘bitwise_or’ not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ‘‘safe’’

def cleardata1(data):   
    '''剔除异常数据'''
    q1 = np.percentile(data.iloc[:,4:16],25)#25的意思是25%
    q3 = np.percentile(data.iloc[:,4:16],75)
    IQR = q3-q1    #四分位距
    Min = q1-1.5*IQR
    Max = q3+1.5*IQR
    index_list=[]
    #barcode_list=[]
    for i in range(len(data)):
        a = data.iloc[i,4:16].values.any()<=Min
        b = data.iloc[i,4:16].values.any()>=Max
        if (a|b):
            index_list.append(i)
            #barcode_list.append(data.loc[i,'jr_cell_code'])#剔除异常的code
    data = data.drop(index=index_list) 
    data.reset_index(drop=True)
    return data

如果我将比较的结果保存到一个变量中,然后执行按位|,则它将起作用:

8. ValueError: Solver lbfgs supports only ‘l2’ or ‘none’ penalties, got l1 penalty.

使用下面代码的时候报错:

#3.1 基于惩罚项的特征选择法:使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。使用feature_selection库的SelectFromModel类结合带L1惩罚项的逻辑回归模型,来选择特征
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
 
#带L1惩罚项的逻辑回归作为基模型的特征选择
sfm = SelectFromModel(LogisticRegression(penalty="l1", C=0.1,solver=‘liblinear’)).fit_transform(X, y)
print('sfm 特征选择后:',sfm.shape)

具体的报错如下:
在这里插入图片描述
LogisticRegression的具体参数如下:

LogisticRegression(C=0.01, class_weight=None, dual=False, fit_intercept=True, intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l1',
                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0, warm_start=False)

我们看solver参数,这个参数定义的是分类器,‘newton-cg’,‘sag’和‘lbfgs’等solvers仅支持‘L2’regularization,‘liblinear’ solver同时支持‘L1’、‘L2’regularization,若dual=Ture,则仅支持L2 penalty。

决定惩罚项选择的有2个参数:dual和solver,如果要选L1范数,dual必须是False,solver必须是liblinear

因此,我们只需将solver='liblinear’参数添加进去即可
lr = LogisticRegression(C = c_param, penalty = ‘l1’,solver=‘liblinear’)

9.ModuleNotFoundError: No module named ‘sklearn.impute’

在jupyter notebook里面输入import shap 报错:ModuleNotFoundError: No module named 'sklearn.impute'
在这里插入图片描述
原因:可能是因为自己的 scikit-learn 库版本太低,需要将其更新到 0.20 版本或以上
查看安装包:在 anaconda prompt 输入pip list 或 conda list 后回车,可查看已经安装的包
更新包:指定版本更新,pip install --upgrade scikit-learn==0.22.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
更新时又出现:

ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。: 'c:\\programdata\\anaconda3\\lib\\site-packages\\scikit_learn-0.19.1-py3.6.egg-info\\dependency_links.txt'
Consider using the `--user` option or check the permissions.

更正为:pip install --upgrade scikit-learn==0.22.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/ --user 即可

10. ValueError: Unknown label type: unknown

使用如下代码构建决策树模型时,报如下错误:ValueError: Unknown label type: unknown

X = df1.iloc[:,2:]
Y = df1['label']
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.3,random_state=42)
dtr = DecisionTreeClassifier()
dtr.fit(X_train, Y_train)
Y_pred = dtr.predict(X_test)

查了一下原因是:应该是标签数据集的类型出错了,那么使用dtype打印一下数据类型看看(或者用df.info()也可以),发现这时候的标签数据类型是object,这样sklearn是无法识别的,所以使用astype(‘int’)进行强制转化即可:

X = df1.iloc[:,2:].astype('float')
Y = df1['label'].astype('int')

这样就不会报错了

11. 使用Excel中的xlwings 调用python代码,报如下错误

在这里插入图片描述
该问题待解决。。。

12. ValueError: Unknown label type: continuous

在调用sklearn时出现 Unknown label type: ‘continuous’: 错误原因是由于label的数据类型不是整型导致的数据格式错误,修改程序如下所示;将相应的训练集数据强制转换为整型数据。

#源码
model.fit(X_train, y_train)
#更改为
model.fit(X_train, y_train.astype('int'))

13. UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb5 in position 13: invalid start byte

在这里插入图片描述
第一次改成了:data = pd.read_csv("a.csv",encoding="unicode_escape"),这样读进来的数据,中文乱码,于是改成了encoding='gb2312',读进来进正确了。
所以这个问题应该是读取中文的问题

14. Exception: Attempt to overwrite cell: sheetname=‘数据(60000)’ rowx=0 colx=0

批量读取数据时,报错如下:
在这里插入图片描述
在这里插入图片描述
这是由于在建表的时候对一个单元格重复操作:
sheet.write(“infoPlist”)
解决办法如下:
添加cell_overwrite_ok=True
sheet.write(“infoPlist”,cell_overwrite_ok=True)
我的原始代码为:writer = pd.ExcelWriter(path + excel_filename,修改为:writer = pd.ExcelWriter(path + excel_filename,cell_overwrite_ok=True)就可以运行了

#向同一个Excel写入多个Sheet的操作
writer = pd.ExcelWriter(path + excel_filename,cell_overwrite_ok=True)
df.to_excel(writer,sheet_name='数据(' + str(pcs_sheet) +')',encoding='utf-8-sig',index=False)
writer.save

也有可能是同一个Excel的两个Sheet名字相同了,所以Python写入sheet表报错,仔细检查写的代码是否存在这样的问题。

15. pandas无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported

原因是最近xlrd更新到了2.0.1版本,只支持.xls文件。所以pandas.read_excel(‘xxx.xlsx’)会报错。

可以安装旧版xlrd,在cmd中运行:

pip uninstall xlrd
pip install xlrd==1.2.0

16. pd.read_excel报错print “EXTERNSHEET(b7-):“

使用pd.read_excel报错
print “EXTERNSHEET(b7-):”
SyntaxError: invalid syntax

有个依赖库更新一下就ok了

pip install --upgrade xlrd

17. Solver lbfgs supports only “l2” or “none” penalties, got l1 penalty.解决办法

在用以下代码建立逻辑回归模型的时候

lr = LogisticRegression(C = c_param, penalty = ‘l1’)

正则化惩罚选择’L1’报错
在这里插入图片描述
我们看solver参数,这个参数定义的是分类器,‘newton-cg’,‘sag’和‘lbfgs’等solvers仅支持‘L2’regularization,‘liblinear’ solver同时支持‘L1’、‘L2’regularization,若dual=Ture,则仅支持L2 penalty。

决定惩罚项选择的有2个参数:dual和solver,如果要选L1范数,dual必须是False,solver必须是liblinear

因此,我们只需将solver='liblinear’参数添加进去即可
lr = LogisticRegression(C = c_param, penalty = ‘l1’,solver=‘liblinear’)

LogisticRegression的参数如下:

LogisticRegression(C=0.01, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l1',
                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False)

18. SpecificationError: nested renamer is not supported

https://blog.csdn.net/icelights/article/details/108047815

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值