Datawhale之动手学数据分析第二章(一)

1.数据清洗简述

1.1缺失值观察

  • 方法一
  • df.info()
  • 方法二 
  • df.isnull().sum()

1.2缺失值处理

  • 方法一:删除

  • 方法二:保留

 

  • df['name'].fillna(0)
  • #不用函数的保留方法 对缺失值进行0填充
    df[df['Age']==None] = 0
    df[df['Age'].isnull()] = 0
    df[df['Age'] == np.nan] = 0

 1.3重复值观察

df[df.duplicates()]

1.4重复值处理

df.drop_duplicates()

1.5保存清洗数据

df.to_csv('test_clear.csv')

2.特征观察与处理

2.1分箱操作

  • 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
  • df['AgeBand']=pd.cut(df['Age'], 5, labels=[1, 2, 3, 4, 5])
    
  • 将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
  • df['AgeBand']=pd.cut(df['Age'], [0, 5, 15, 30, 50, 80], right=False, labels=[1, 2, 3, 4, 5])
    
  • 将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
  • df['AgeBand']=pd.qcut(df['Age'], [0.1, 0.3, 0.5, 0.7, 0.9, 1.], labels=[1, 2, 3, 4, 5])
    

2.2对文本变量进行转换

2.2.1查看类别文本变量名及种类

  • 方法一:value_counts
  • df['Sex'].value_counts()
  • 方法二:unique
  • df['Sex'].unique()
  • df['Sex'].nunique()

         unique():以数组形式(numpy.ndarray)返回列的所有唯一值(特征的所有唯一值)

         nunique(): Return number of unique elements in the object.即返回的是唯一值的个数

2.2.2将文本变量Sex, Cabin ,Embarked用数值变量12345表示

  • 方法一:replace
  • df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
    # 适用于种类较少的
    
  • 方法二:map
  • df['Sex_num'] = df['Sex'].map({'male':1, 'female':2})
    #跟方法1一样,适用于种类较少的。
    
  • 方法三:使用sklearn.preprocessing的LabelEncoder
  • from sklearn.preprocessing import LabelEncoder
    for feat in ['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))
    #这种就无所谓种类的的多少了,均适用
    

2.2.3将文本变量Sex, Cabin, Embarked用one-hot编码表示

for feat in ["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)

2.3从纯文本Name特征里提取出Titles的特征

df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值