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)