本方法适用于数据不规范 ,如:一个特征中文夹杂数值夹符号
于是写了个方法,
先分辨离散和连续性特征,分类超过16种为离散型
然后将其中的字母文字符号替换
快速的将特征的数值规范化
1.找出离散和连续型特征
nubfeatures = [i for i in test_x.columns if i not in text]
for i in nubfeatures:
if data[i].unique().shape[0]>16:
con.append(i)
else:
cat.append(i)
len(con),len(cat)
2.处理数据
import string
import re
# 定义包含所有标点符号的字符串
punctuation = string.punctuation + ",。!?;:‘’“”()《》【】"
pattern = r'[\\,><.,。]+'+punctuation
repat = r'[^a-zA-Z\u4e00-\u9fa5]+'
def clearnN(data):
for i in con+cat:
#删除值中的符号
data[i] = data[i].astype(str)
data[i] = data[i].apply(lambda x: re.sub(pattern, "", str(x)))
data[i] = data[i].apply(pd.to_numeric, errors='coerce').fillna(-1)
if i in con:
continue
else:
#离散型特征编码
data[i] = data[i].astype('category')
data[i] = data[i].cat.codes
#转为float类型
data[i] = data[i].astype(float)
data.describe()
clearnN(test_x)
clearnN(train_x)
3列名符号清除
机器学习等很多要求表格名称不能有符号
代码如下
data.columns = data.columns.str.replace(r'[^a-zA-Z0-9\u4e00-\u9fa5]+', '', regex=True)
非常简单 省时省力
祝大家实验运行顺利