hands-on-data-analysis 第二单元 - 数据清洗及特征处理

简介: 数值列读取数据后,空缺值的NaN为浮点型,最好用`np.nan`判断是否是NaN。

hands-on-data-analysis 第二单元 - 数据清洗及特征处理

1.缺失值观察与处理

首先当然是导入相应的模块

#加载所需的库
import numpy as np
import pandas as pd

1.1 缺失值观察

接下来就是观察缺失值:

df.info()

df.info()
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

df.isnull().sum()

PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

1.2 缺失值处理

数值列读取数据后,空缺值的NaN为浮点型,最好用np.nan判断是否是NaN。

isnull()可以筛选出缺失的值

df[df['Age'].isnull()]
df.tail(5)

np.isnan()也可以筛选出缺失的值

df[np.isnan(df['Age'])]
df.tail(5)

但是,np.isnan不可以用来与任何数值进行>,==!=之类的比较

np.nan != np.nan
True

df.dropna(inplace=True)可以用来丢弃掉有NaN数据的那一行,其中inplace=True表示修改原数据。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

df.fillna(0,inplace=True) 可以用来将NaN数据用0填充,其中inplace=True表示修改原数据。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

2.重复值

重复值可以使用df.duplicated()来查询

df[df.duplicated()]

drop_duplicates()可以用来删除重复值

df = df.drop_duplicates()

3.分箱(离散化)处理

3.1.平均分箱

# 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])

3.2.划分分箱

df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])

3.3.概率分箱

df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])

4.文本变量进行转换

4.1. 查看文本变量名和种类

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

4.2 文本转换

#将类别文本转换为12345
#方法一: replace
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
#方法二: map
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
#方法三: 使用sklearn.preprocessing的LabelEncoder
from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket']:
    lbl = LabelEncoder()
    print(f"feat is {feat}") 
    print("end")
    label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))
    print(f"label_dict is {label_dict}")
    print("end label_dict")
    df[feat + "_labelEncode"] = df[feat].map(label_dict)
    df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))

5. 独热编码

#OneHotEncoder
for feat in ["Age", "Embarked"]:
    x = pd.get_dummies(df[feat], prefix=feat)
    df = pd.concat([df, x], axis=1)
df.head()

参考资料

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.cut.html

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.qcut.html

本项目地址:

hands-on-data-analysis 第二单元 - 飞桨AI Studio (baidu.com)

目录
相关文章
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
312 2
|
安全 Linux 网络安全
什么是VPN网关?
VPN网关是一款基于Internet的网络连接服务,通过加密通道的方式实现企业数据中心、企业办公网络或Internet终端与阿里云专有网络(VPC)安全可靠的连接。VPN网关提供IPsec-VPN连接和SSL-VPN连接。
2033 0
|
小程序 JavaScript 前端开发
微信小程序学习实录3(环境部署、百度地图微信小程序、单击更换图标、弹窗信息、导航、支持腾讯百度高德地图调起)
微信小程序学习实录3(环境部署、百度地图微信小程序、单击更换图标、弹窗信息、导航、支持腾讯百度高德地图调起)
1142 0
|
JavaScript 容器
markdown-it 插件如何写(三)
「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。
468 0
markdown-it 插件如何写(三)
|
前端开发 区块链
dapp丨defi预售代币智能合约流动性挖矿系统开发详情介绍
 那么,Web3究竟是什么?即使你可能不熟悉该术语所指的内容,但你之前可能已经遇到过它。通俗地说,Web3被广泛理解为互联网的第三个(最新的)“阶段”。迄今为止,大约每隔十年,互联网就会进入一个新阶段——从Web1到Web2再到Web3。
dapp丨defi预售代币智能合约流动性挖矿系统开发详情介绍
|
前端开发 JavaScript 开发工具
如何快速的制作tree型的目录结构图?可惜只会Mac版。
如何快速的制作tree型的目录结构图?可惜只会Mac版。
288 0
|
Java Docker Spring
SpringBoot相关
目录 SpringBoot 安装SpringBootCLI Springboot的测试模块 参考博客 配置文件 多种配置文件并切换 yml方式 yml和Properties结合 ...
2270 0
|
存储 安全 区块链
下一场金融危机很可能由网络犯罪触发
本文讲的是下一场金融危机很可能由网络犯罪触发,货币及支付交易的数字化,很容易被有组织的犯罪团伙(OCGs)入侵、利用或盗窃。
1013 0
|
6天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
|
8天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
1108 14