当前位置: 首页 > article >正文

数据分析基础之《pandas(6)—高级处理》

一、缺失值处理

1、如何处理nan
两种思路:
(1)如果样本量很大,可以删除含有缺失值的样本
(2)如果要珍惜每一个样本,可以替换/插补(计算平均值或中位数)

2、判断数据是否为nan
(1)pd.isnull(df)
返回一堆布尔值,False不是缺失值,True是缺失值

(2)pd.notnull(df)
返回一堆布尔值,True不是缺失值,False是缺失值

3、缺失值处理方式
存在缺失值nan,并且是np.nan
(1)dropna(axis='rows', inplace=False)
删除存在缺失值
默认不替换原数据,返回新数据,inplace=True修改原数据

(2)fillna(value, inplace=True)
替换缺失值
说明:
value:替换成的值
inplace:
    True:会修改原数据
    False:不替换修改原数据,生成新的对象

(3)缺失值不是nan,是其他标记的
后面再说

二、缺失值处理实例

1、电影数据文件获取

import pandas as pd

movie = pd.read_csv("./IMDB-Movie-Data.csv")

movie

import numpy as np

# 判断是否存在缺失值
np.any(pd.isnull(movie))

np.all(pd.notnull(movie))

# 用dataframe的any方法
pd.isnull(movie).any() # 返回每一个字段是否有缺失值

# 用dataframe的all方法
pd.notnull(movie).all()

# 用dataframe的isnull方法
movie.isnull().sum()

2、删除含有缺失值的样本

# 缺失值处理
# 删除含有缺失值的样本
data1 = movie.dropna()

data1.isnull().sum()

3、替换缺失值

# 含有缺失值的字段
# Revenue (Millions)
# Metascore

movie["Revenue (Millions)"].fillna(movie["Revenue (Millions)"].mean(), inplace=True)
movie["Metascore"].fillna(movie["Metascore"].mean(), inplace=True)

movie.isnull().sum()

4、不是缺失值nan,是其他标记的
比如是?

思路:
(1)进行替换,将?替换成np.nan
(2)处理np.nan缺失值的步骤来
(3)replace(to_replace=, value=)
说明:
to_replace:替换前的值
value:替换后的值

# 不是缺失值nan,是其他标记的
name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
                   'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
                   'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv("./breast-cancer-wisconsin.data", names=name)

data

data_new = data.replace(to_replace="?", value=np.nan)

data_new

data_new.dropna(inplace=True)

data_new.isnull().sum()

三、数据离散化

1、什么是数据离散化
我们用数值表示类别,计算机它只知道数值,会认为数值大的有什么优势

连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数、值代表落在每个子区间中的属性值,避免了由于数值差异导致类别的平衡

例子1:
  男  女  年龄
A  1   0   23
B  0   1   30
C  1   0   18

例子2:
原始的升高数据:165、174、160、180、159、163、192、184、
假设按照身高分几个区间段:(150,165],(166,180],(180,195]
这样我们将数据分到了三个区间段,我们可以对应的标记为矮、中、高三个类别,最终要处理成一个“哑变量”矩阵

我们把这种数据编码称为one-hot编码,也叫哑变量

2、为什么要数据离散化
连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数,离散化方法经常作为数据挖掘的工具

3、如何实现数据离散化
流程:
(1)对数据进行分组
(2)对分好组的数据求哑变量

4、对数据分组方法
pd.qcut(data, bins)
自动分组
说明:
data:要分组的数据
bins:要分的组数
返回值:分好组的Series

pd.cut(data, bins)
自定义分组
说明:
data:要分组的数据
bins:自定义的区间,以列表的形式[]传进来
返回值:分好组的Series

series.value_counts()
统计分组次数
对数据进行分组一般会与value_counts搭配使用,统计每组的个数

5、对分好组的数据求哑变量(one-hot编码)
pd.get_dummies(data, prefix=None)
说明:
data:array-like、Series、DataFrame
prefix:分组名字

6、小案例

# 数据的离散化
# 准备数据
data = pd.Series([165,174,160,180,159,163,192,184], index=['No1:165', 'No2:174','No3:160', 'No4:180', 'No5:159', 'No6:163', 'No7:192', 'No8:184'])

data

# 自动分组
sr = pd.qcut(data, 3)

sr

# 转换成one-hot编码
pd.get_dummies(sr, prefix="height")

# 统计每个区间有多少样本
sr.value_counts()

# 自定义分组
bins = [150, 165, 180, 195]
cut = pd.cut(data, bins)

cut

pd.get_dummies(cut, prefix="身高")

cut.value_counts()

7、one-hot编码占内存,然后再用稀疏矩阵来减少内存。达到提取特征的目的

8、案例:股票的涨跌幅离散化

# 股票涨跌幅离散化
# 1、读取股票的数据
stock = pd.read_csv("./stock_day.csv")

p_change = stock["p_change"]

p_change

# 自动分组
sr = pd.qcut(p_change, 10)

sr.value_counts()

# 离散化
pd.get_dummies(sr, prefix="涨跌幅")

# 自定义分组
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
sr = pd.cut(p_change, bins)

sr.value_counts()

# 离散化
stock_change = pd.get_dummies(sr, prefix="rise")
stock_change


http://www.kler.cn/a/234183.html

相关文章:

  • Linux网络——网络初识
  • Linux源码阅读笔记-V4L2框架基础介绍
  • 曹操为什么总是亲征
  • Python 随笔
  • Vue 3 介绍及应用
  • 【C++】new操作符的使用说明
  • uniapp 本地存储的方式
  • 156基于Matlab的光纤陀螺随机噪声和信号
  • 「优选算法刷题」:数青蛙
  • 如何系统的自学Python?通义千问、讯飞星火、文心一言及ChatGPT的回答
  • 复习面经哦
  • effective c++ 笔记 条款13-18
  • 飞天使-k8s知识点14-kubernetes散装知识点3-Service与Ingress服务发现控制器
  • Python中使用multiprocessing模块创建进程
  • MYSQL笔记:约束条件
  • 算法||实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度
  • 最佳视频转换器软件:2024年视频格式转换的选择
  • React Emotion 如何优雅的使用样式(一)
  • 人物系统构建1
  • 使用raw.gitmirror.com替换raw.githubusercontent.com以解决brew upgrade python@3.12慢的问题
  • 问题:2、计算机网络的目标是实现________。 #媒体#知识分享
  • 第十六章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 方法和属性
  • 知识图谱与图神经网络融合:构建智能应用的新前沿
  • [145] 二叉树的后序遍历 js
  • /etc/apt/sources.list 包含ubuntu18.04或bionic字样的解决思路
  • C语言字符常量与字符变量..