你可以在编辑代码的时候,选择python格式呀,这样代码就是对齐的,符合python语法格式,会提高答疑者的效率呀
@WXQIfMw
WXQIfMw
2020-12-21
错误位置是get_kind()函数中的正则表达式

WXQIfMw
2020-12-19
1、报错信息的前几行应该有有用的信息
2、怀疑是get_kind的正则表达式的问题
WXQIfMw
2020-12-19
loan=pd.read_csv(r"C:\Users\86153\Desktop\python考试题\12月考试\data\small_loan.csv",encoding="utf-8")
loan.head(10)
loan.drop("id",inplace=True,axis=1)
x_=loan.drop(["response"],axis=1)
y_=loan["response"].values
#区分类别
def get_kind(x:pd.Series,diff_limit:int=10):
x=x.astype(str)
x=x.str.extract(r"(^(\-|)(?=.*\d)\d*(?:\.\d*)?$")[0]
x.dropna(inplace=True)
if x.nunique()>diff_limit:
kind="numeric"
else:
kind="categorical"
return kind
#处理错误值
class wrong_value_fillna(BaseEstimator,TransformerMixin):
def __init__(self,
num_list:list=None,
cate_list:list=None,
wrong_value:list=None,
diff_num:int=10):
self.num_list=num_list
self.cate_list=cate_list
self.diff_num=diff_num
self.wrong_value=wrong_value
def fit(self,X,y=None):
X=X.copy()
if self.num_list is None:
self.num_list=[]
for col in X.columns:
kind=get_kind(x=X[col],diff_limit=self.diff_num)
if kind=="numeric":
self.num_list.append(col)
if self.cate_list is None:
self.cate_list=[]
for col in X.columns:
kind=get_kind(x=X[col],diff_limit=self.diff_num)
if kind=="categorical":
self.cate_list.append(col)
return(self)
def transform(self,X,y=None):
X=X.copy()
X.replace(self.wrong_value,np.nan,inplace=True)
for col in X.columns:
if get_kind(X[col])=="numeric":
X[col]=X[col].astype("float")
else:
X[col]=X[col].astype("object")
return X
wvf=wrong_value_fillna(wrong_value=[".","?"])
x_=wvf.fit_transform(x_,y_)
老师,前面的代码是这样的,运行都没有报错,运行到最后一步时报missing)错误
WXQIfMw
2020-12-19
查看报错信息前几行给的提示信息,也许能确定错误的具体位置。
WXQIfMw
2020-12-19
这个fit_transform()是自定义的吗?从代码来看没啥问题,看看自定义函数中是否存在语法错误
WXQIfMw
2020-12-19
发错了。这个 https://www.sohu.com/a/341248850_584557
张07
2020-12-18
https://zhuanlan.zhihu.com/p/101812525
张07
2020-12-18
你不盖住箭头是类型二,盖箭头不对,你自己操作试一下就知道了,单向下多表不行筛选一表,因为得出来的值不正确,你把交叉筛选这块儿的录播再看看
张07
2020-12-17