【pandas百炼成钢】数据预览与预处理

知识目录

  • 前言
  • 一、数据查看
      • [1 - 查看数据维度](#1 - 查看数据维度)
      • [2 - 随机查看5条数据](#2 - 随机查看5条数据)
      • [3 - 查看数据前后5行](#3 - 查看数据前后5行)
      • [4 - 查看数据基本信息](#4 - 查看数据基本信息)
      • [5 - 查看数据统计信息|数值](#5 - 查看数据统计信息|数值)
      • [6 - 查看数据统计信息|非数值](#6 - 查看数据统计信息|非数值)
      • [7 - 查看数据统计信息|整体](#7 - 查看数据统计信息|整体)
  • 二、缺失值处理
      • [8 - 计算缺失值|总计](#8 - 计算缺失值|总计)
      • [9 - 计算缺失值|分列](#9 - 计算缺失值|分列)
      • [10 - 查看缺失值](#10 - 查看缺失值)
      • [11- 高亮缺失值](#11- 高亮缺失值)
      • [12 - 删除缺失值](#12 - 删除缺失值)
      • [13 - 缺失值补全|整体填充](#13 - 缺失值补全|整体填充)
      • [14 - 缺失值补全|向上填充](#14 - 缺失值补全|向上填充)
      • [15 - 缺失值补全|整体均值填充](#15 - 缺失值补全|整体均值填充)
      • [16 - 缺失值补全|上下均值填充](#16 - 缺失值补全|上下均值填充)
      • [17 - 缺失值补全|匹配填充](#17 - 缺失值补全|匹配填充)
  • 三、重复值处理
      • [18 - 查找重复值](#18 - 查找重复值)
      • [19 - 查找重复值|根据某列](#19 - 查找重复值|根据某列)
      • [20 - 删除重复值](#20 - 删除重复值)
  • 结语

前言

  • 为什么需要数据预览与预处理?

在真实世界中,数据通常是不完整的(缺少某些感兴趣的属性值)、不一致的(包含代码或者名称的差异)、极易受到噪声(错误或异常值)的侵扰的。

就像一个大厨现在要做美味的蒸鱼,如果不将鱼进行去鳞等处理,一定做不成我们口中美味的鱼。

在拿到数据第一步当然是对数据做一个大概的浏览,以及对缺失值重复值进行相关处理。本小节就将练习这部分的基本操作。

注意

  • 1.每一种操作都可能对应一种或多种解法,文章里的不一定是最优的。

  • 2.为了尽可能多的介绍不同方法,因此文章中部分操作不是必须的。

一、数据查看

首先进行导入必要的包,然后加载数据文件。(数据文件获取链接:「movie_top_250.xlsx」

python 复制代码
import numpy as np
import pandas as pd
python 复制代码
df = pd.read_excel("./data/movie_top_250.xlsx")

1 - 查看数据维度

查看数据行列,对数据量进行初步掌握

python 复制代码
df.shape

2 - 随机查看5条数据

法一:使用 take() 函数结合 random 库

python 复制代码
# 生成从0-262之间的5个不重复随机数,replace=False是关键
n = np.random.choice(262,5,replace=False)
# 使用 take 函数实现
df.take(n)

法二:使用 sample() 函数实现随机抽样

python 复制代码
df.sample(5)

补充:三种抽样方式

有放回抽样

python 复制代码
df.take(np.random.randint(0,4,size=5))

无放回抽样

python 复制代码
df.take(np.random.permutation([0,1,2,3,4])) # 随机交换

随机抽样

python 复制代码
df.sample(n) # n是抽样数量

3 - 查看数据前后5行

python 复制代码
# 查看数据前5行
df.head()
python 复制代码
# 查看数据后5行
df.tail()

4 - 查看数据基本信息

看看数据列名,非空行数,数据类型,内存使用情况等

python 复制代码
df.info()

5 - 查看数据统计信息|数值

查看 数值型 列的统计信息,计数、均值、最值、方差等

python 复制代码
# describe() 函数默认对数值型列进行计算统计信息、均值、最值和百分值。
df.describe()

更直观的查看,保留两位小数,然后转置:

python 复制代码
df.describe().round(2).T

6 - 查看数据统计信息|非数值

查看 非数值型 列的出现个数,多少种不同值,出现次数最高的值,出现频次

python 复制代码
df.describe(include=['O'])

7 - 查看数据统计信息|整体

查看 全部 列的统计信息

python 复制代码
df.describe(include='all')

查看指定列的统计信息

python 复制代码
df['上映年份'].describe()

二、缺失值处理

8 - 计算缺失值|总计

查看总共有多少个缺失值

python 复制代码
df.isnull().sum().sum()

9 - 计算缺失值|分列

查看每列有多少缺失值

python 复制代码
df.isnull().sum()

10 - 查看缺失值

为了后面更方便的处理缺失值,现在先看看全部缺失值所在的行

法一:使用 isnull() 函数

python 复制代码
cond = df.isnull().any(axis = 1)
df[cond]

法二:使用 notnull() 函数

python 复制代码
cond = df.notnull().all(axis = 1)
df[~cond]

11- 高亮缺失值

很明显,虽然上一题找到了全部缺失值所在的行,但是看起来不太直观,

现在,将缺失值进行高亮进一步查看

python 复制代码
# 高亮显示null
df[cond].style.highlight_null()
python 复制代码
# 高亮显示null,并且设置颜色
df[cond].style.highlight_null(null_color='#E36C07')

12 - 删除缺失值

处理缺失值最简单的方式,当然是将缺失值出现的行全部删掉 ~

现在,将缺失值出现的行全部删掉

python 复制代码
df.dropna(inplace=False)

13 - 缺失值补全|整体填充

除了删除缺失值最省事之外,也可以将全部缺失值替换为一个 固定的值/文本

现在,将全部缺失值替换为 #

python 复制代码
df = df.fillna('#')

14 - 缺失值补全|向上填充

从上一小节的查看数据中,不难发现整理数据是按照评分进行降序排列的,

因此对于评分列的缺失值处理,我们可以用上一个电影的评分进行填充。

现在将评分列的缺失值,替换为上一个电影的评分

python 复制代码
df['评分'] = df['评分'].fillna(method='ffill')

15 - 缺失值补全|整体均值填充

对于评价人数列的缺失值处理,我们可以使用整列的均值进行填充

现在,将评价人数列的缺失值,用整列的均值进行填充

python 复制代码
df['评分'] = df['评分'].mean()
python 复制代码
df['评分'] = df['评分'].fillna(df['评分'].mean())

16 - 缺失值补全|上下均值填充

除了可以使用整列的均值进行填充,也可以使用缺失值位置的上下均值进行填充、

现在,将评价人数列的缺失值,用上下数字的均值进行填充

python 复制代码
df['评价人数'] = df['评价人数'].fillna(df['评价人数'].interpolate())

17 - 缺失值补全|匹配填充

除了利用均值填充,有时还需要根据另一列的值进行匹配填充。

现在填充 "语言" 列的缺失值,要求根据 "国家/地区" 列的值进行填充。

例如 《海上钢琴师》国家/地区为 意大利,根据其他意大利国家对应的语言来看,应填充为 意大利语。

python 复制代码
# 根据国家/地区分组,然后用后面的值填充
df['语言'] = df.groupby('国家/地区')['语言'].bfill()

三、重复值处理

18 - 查找重复值

将全部重复值所在的行筛选出来

python 复制代码
df[df.duplicated(keep='first')]

19 - 查找重复值|根据某列

上面是所有列完全重复的情况,但有时我们只需要根据某列查找重复值

python 复制代码
df[df['片名'].duplicated()]

20 - 删除重复值

删除全部的重复值,但保留第一次出现的值

法一

python 复制代码
df = df[~df.duplicated()]

法二

python 复制代码
df = df.drop_duplicates()

删除全部的重复值,但保留最后一次出现的值

python 复制代码
df = df[~df.duplicated(keep='last')]

结语

以上就是本期要分享的全部内容了!我们下期再见 ~ ✨

⭐️如果有不懂的地方,欢迎大家和我一起探讨 ~

我是向阳花花花花,数据科学路上,与你同行 ⭐️

相关推荐
谢眠38 分钟前
机器学习day5-随机森林和线性代数1
线性代数·随机森林·机器学习
光明中黑暗40 分钟前
机器学习 决策树
决策树·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(218)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
sp_fyf_20241 小时前
【大语言模型】ACL2024论文-11 动态主题模型评估
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·数据挖掘
阿达_优阅达2 小时前
用 Google Sheets 表格增强 Tableau 数据分析的 3 种玩法
google·数据分析·企业数字化转型·tableau·googlesheets
isNotNullX2 小时前
从数据仓库搭建把握复杂查询和数据分析性能优化
大数据·数据仓库·性能优化·数据分析·etl
她说人狗殊途2 小时前
数据分析24.11.13
数据挖掘·数据分析
孤单网愈云2 小时前
11.13机器学习_线性回归
机器学习
不去幼儿园2 小时前
【SSL-RL】自监督强化学习: 好奇心驱动探索 (CDE)算法
大数据·人工智能·python·算法·机器学习·强化学习
SaNDJie3 小时前
24.11.13 机器学习 特征降维(主成份分析) KNN算法 交叉验证(K-Fold) 超参数搜索
人工智能·算法·机器学习