数据清洗及特征处理

缺失值

缺失值的检测

数值类缺失值在pandas中被显示为NaN(Not A Number);

df.info()

返回的结果中,我们只需观察每一列对应的Non-Count的数量是否等于RangeIndex即可;

 df.isnull().sum()

该方法能够直观观察出每一列的缺失值数量

 df.describe()

返回值中第一行count,这一行的每一个数据与其本列的总个数相减即为每一列的缺失值数量

 df[['A','C','每一列的主标题']].head(3)

head()默认前五行;该方法用来查看这几列的前几行的数据

缺失值的处理
缺失值进行赋值处理:

原数据如下:

 (1) df[df['某一列的表头']==None]=0
 (2) df[df['Age'].isnull()]=0
    处理后整行都变为0

 (3) df[df['Age']==np.nan]=0
         处理后整行都变为0

数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan

 (4) df.fillna(0)
  空缺值被填充为0

 (5) df.dropna()     默认为axis=0
 删除至少缺少一个元素的行

dropna函数

DataFrame.dropna(axis=0,how='any',thresh=None, subset=None, inplace=False)

axis参数确定是否删除包含缺失值的行或列:

axis=0或axis='index'删除含有缺失值的行;

axis=1或axis='columns'删除含有缺失值的列;

how参数当我们至少含有一个NA时,确定是否从DataFrame中删除行或列

how='all'时表示删除全是缺失值的行(列);

how='any'时表示删除只要含有缺失值的行(列);

thresh=n表示保留至少含有n个非NA数值的行;

subset定义要在哪些列中查找缺失值;

inplace表示直接在原DataFrame修改;

重复值

查看重复值
 df.duplicated()
处理重复值

用来检测重复的行

 duplicated(subset=None,keep='first')

参数:

subset:对应值列名,将列对应值相同的行进行去重,默认值None,即考虑所有列;

Keep='first/last/False';first默认值表示除第一次出现外其余相同的被标记为重复;last:除最后一次出现外,其余相同的被标记为重复;False:即所有相同的都被标记为重复;

删除重复值

df.drop_duplicates(subset=None,keep='first',inplace=False)

subset : 用来指定特定的列,默认所有列;

keep : 有三个值,{‘first’, ‘last’, False}, 默认first,删除重复项并保留第一次出现的项;

inplace:是直接在原来数据上修改还是保留一个副本;

特征值

数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征;文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征;

数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析。

数据分箱(离散化)处理

分箱实际上是按属性值划分的子区间

 pandas.cut(x, bins, right = True, labels = None, retbins = False, precision = 3, include_lowest = False, duplicates = ‘raise’, ordered = True)

x: 被切分的类数组数据,必须是1维的(不能用DataFrame)

bins: 合并的标准 int: 将 x 平分成bins份。x 的范围在每侧扩展0.1%,以包括 x 的最大值和最小值sequence of scalars: 允许不均匀宽度的bin边缘,没有扩展x的范围

interval Index: 定义要使用的精确区间 right: 表示是否包含区间最右部分,默认为right = True

labels: 指定返回的bin标签,若label = False, 仅返回bin的整数指示符

retbin: 表示是否返回bin,当bins为一个Int类型的标量时比较有用,默认rebin = False

precesion: 保留区间的小数点的位数,默认为3 include_lowest: 表示区间的左边是开的还是闭的,默认为 False

duplicates: 是否允许重复区间。raise: 不允许,drop:允许

ordered:表示标签是否有序。适用于返回类型为Categorical and Series (with Categorical dtype)。默认为True, 对生成的类型进行分类

 pandas.qcut(x, q, labels = None, retbins = False, precision = 3, duplicates = 'raise')

将变量离散化为大小相等的桶

x: 被切分的类数组数据,必须是1维的

q: 分位数。10表示十分位,4表示四分位

labels: 指定返回的bin标签,若label = False, 仅返回bin的整数指示符

retbin: 表示是否返回bin,当bins为一个Int类型的标量时比较有用,默认rebin = False

precesion: 保留区间的小数点的位数,默认为3

duplicates: 是否允许重复区间。raise: 不允许,drop:允许

对文本变量进行转化
查看文本变量名及种类

df.unique() 返回特征值名称

df.nunique() 返回特征值个数

df.value_counts() 返回特征值及其个数

 df['Sex_num'] =df['Sex'].replace(['male','female'],[1,2])
 df['Sex_num'] =df['Sex'].map({'male': 1, 'female': 2})

使用sklearn.preprocessing的LabelEncoder

 fromsklearn.preprocessingimportLabelEncoder
 forfeatin ['Cabin', 'Ticket']:
     lbl=LabelEncoder()  
     label_dict=dict(zip(df[feat].unique(), range(df[feat].nunique())))
     df[feat+"_labelEncode"] =df[feat].map(label_dict)
     df[feat+"_labelEncode"] =lbl.fit_transform(df[feat].astype(str))
将类文本转换为one-hot编码
 方法一: OneHotEncoder
 forfeatin ["Age", "Embarked"]:
 #     x = pd.get_dummies(df["Age"] // 6)
 #     x = pd.get_dummies(pd.cut(df['Age'],5))
     x=pd.get_dummies(df[feat], prefix=feat)
     df=pd.concat([df, x], axis=1)
 #df[feat] = pd.get_dummies(df[feat], prefix=feat)
从纯文本Name特征里提取出Titles的特征(Mr.Miss.Mrs)
 df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)

这里用到正则表达式

  • [A-Za-z]代表任一字母(大写或小写)

  • + 代表+号前的字符出现1次或多次

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

susu耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值