第十二篇:学习python数据清洗

文章目录

  • 一、啥是数据清洗
  • 二、将表格数据导入pandas中
    • [1. 准备工作](#1. 准备工作)
    • [2. 引入csv文件](#2. 引入csv文件)
      • [2.1 引入pandas库](#2.1 引入pandas库)
      • [2.2 读取文件/修改名称](#2.2 读取文件/修改名称)
      • [3.2 快速浏览数据](#3.2 快速浏览数据)
      • [2.4 修改名字](#2.4 修改名字)
      • [2.5 查找缺失值](#2.5 查找缺失值)
      • [2.6 删除缺失值](#2.6 删除缺失值)
    • [3. 引入Excel文件](#3. 引入Excel文件)
      • [3.1 引入pandas库](#3.1 引入pandas库)
      • [3.2 读取Excel文件的人均GDP数据](#3.2 读取Excel文件的人均GDP数据)
      • [3.3 查看数据类型和non-null值计数](#3.3 查看数据类型和non-null值计数)
      • [3.4 重命名并删除空格](#3.4 重命名并删除空格)
      • [3.5 数据类型转换](#3.5 数据类型转换)
      • [3.6 摘要统计信息](#3.6 摘要统计信息)
      • [3.7 删除缺失值](#3.7 删除缺失值)
      • [3.8 设置索引](#3.8 设置索引)
  • 小结
  • 暂时学到这,边学边写

一、啥是数据清洗

数据处理和清洗是数据科学和机器学习领域中的重要环节,它们涉及到数据的预处理、转换、清理和整理等工作。在现实生活中,数据通常是不完美的,可能包含错误、缺失值、重复值等问题,因此需要进行数据处理和清洗。Python是一个非常流行的编程语言,它提供了许多强大的库来帮助我们进行数据处理和清洗,例如pandas、numpy、sklearn等。

二、将表格数据导入pandas中

1. 准备工作

下载以上文件,并准备好测试数据

我分别放在了

  • chapter01:在C盘------用户------Administrator------AAAAAAAAAA------data 数据内
  • EditPlus:在电脑E盘EditPlus中
  • Anaconda3:在C盘------ProgramData------Anaconda3中

准备好上面的工具之后在,开始界面单击开始,

然后会出现一个这个页面(显示的内容和------文件资源管理器------C盘------用户------Administrator这个文件夹下面的内容是一样的,可以在文件夹中创建一个文件夹,如果页面同步更新,说明操作无误):

然后右上角new------选择python3即可




2. 引入csv文件

2.1 引入pandas库

导入pandas库并设置环境,更轻松地查看输出

python 复制代码
import pandas as pd
pd.options.display.float_format = '{:,.2f}'.format	#保留两位小数
pd.set_option('display.width',85)	#展示的宽度
pd.set_option('display.max_columns',8)	#展示的最大列数

2.2 读取文件/修改名称

读取文件,为标题设置新名称,然后解析日期列。

将skiprows参数设置为1,以跳过第一行,将列的列表传递给parse_dates以从这些列中创建一个Pandas日期时间列,并将low_memory参数设置为False,以减少过程中的内存使用量

代码如下:

py 复制代码
landtempssample = pd.read_csv(r'data/landtempssample.csv',
names=['stationid','year','month','avgtemp','latitude',
      'longitude','elevation','station','countryid','country'],
        skiprows=1,	#跳过第一行
        parse_dates=[['month','year']],
        low_memory=False)	#低内存运行
type(landtempssample)

运行效果:

3.2 快速浏览数据

使用head查看前几条数据,显示所有列的数据类型以及行和列的数量

查看前几行数据:

py 复制代码
landtempssample.head(7)

效果如下:

查看行和列的类型:

py 复制代码
landtempssample.dtypes

效果如下:

查看行和列的数量:

py 复制代码
landtempssample.shape

效果如下:

2.4 修改名字

把日期列修改一个更好的名字,并且查看月份平均温度的摘要统计信息

py 复制代码
landtempssample.rename(columns={'month_year':'measuredate'},inplace = True)
landtempssample.dtypes
landtempssample.avgtemp.describe()

效果如下:

2.5 查找缺失值

使用isnull可以为每个列中的每个缺失值返回True,而在没有缺失值时返回False

将isnull和sum链接在一起时即可计算每一列中的缺失值数

py 复制代码
landtempssample.isnull().sum()

具体效果如下:

2.6 删除缺失值

使用subset参数高速dropna删除avgtemp列包含缺失值的行,将inplace设置为True

py 复制代码
landtempssample.dropna(subset=['avgtemp'],inplace=True)
landtempssample.shape

效果如下:




3. 引入Excel文件

3.1 引入pandas库

py 复制代码
import pandas as pd

3.2 读取Excel文件的人均GDP数据

选择包含所需的数据的工作表,但跳过不需要的行和列,使用sheet_name参数即可指定工作表,将skiprows设置为4,skipfooter设置为1,以跳过前四行,和最后一行。设置usecols参数的值,以获取A列,从列到T列的数据

实例如下:

py 复制代码
percapitaGDP = pd.read_excel('data/GDPpercapita.xlsx',
sheet_name = "OECD.Stat export",
skiprows = 4,# 跳过前四行
skipfooter = 1,# 跳过最后一行
usecols = "A,C:T")# 展示的列为A列和C---T列

percapitaGDP.head()# 展示前五行

运行结果如下:

3.3 查看数据类型和non-null值计数

使用DataFrame的info方法,查看数据类型和non-null值计数:

实例:

py 复制代码
percapitaGDP.info()

3.4 重命名并删除空格

将Year列重命名为metro,并且检查前导空格用startswith(''),使用endswith('')检查后导空格,判断是否存在空格用any(),如果有就使用strip来删除前导和后导空格

重命名

py 复制代码
percapitaGDP.rename(columns={'year':'metro'},inplace=True)

测试前导空格

py 复制代码
percapitaGDP.metro.str.startswith('').any()

测试后导空格

py 复制代码
percapitaGDP.metro.str.endswith('').any()

删除前导和末尾空格

py 复制代码
percapitaGDP.metro = percapitaGDP.metro.str.strip()

具体如下:

3.5 数据类型转换

把所有年份的GDP年份列(2001-2018),并将数据类型从object转换为float,即使存在字符数据,也强制转换(目的是为了让这些字符串变为缺失值)最后,重命名年份列,为了更好地展示数据

具体如下:

py 复制代码
for col in percapitaGDP.columns[1:]:
    percapitaGDP[col] = pd.to_numeric(percapitaGDP[col],errors='coerce')
    percapitaGDP.rename(columns={col:'pcGDP'+col},inplace = True)
percapitaGDP.head()

效果如下:

使用dtypes检查一下:

py 复制代码
percapitaGDP.dtypes

3.6 摘要统计信息

使用describe为表中所有数字数据生成摘要统计信息

py 复制代码
percapitaGDP.describe()

运行结果如下:

3.7 删除缺失值

  1. 使用dropna的subset参数检查所有列
  2. 使用how指定仅当subset所有列缺失时才删除行
  3. 最后使用shape显示结果行数和列数
py 复制代码
percapitaGDP.dropna(subset = percapitaGDP.columns[1:],how="all",inplace = True)
percapitaGDP.describe()

具体如下:

py 复制代码
percapitaGDP.head()

如下图:

最后用shape显示行数列数

py 复制代码
percapitaGDP.shape

运行如下:

3.8 设置索引

使用metro列设置索引

在设置索引之气那,确认metro列有480个有效值,并且有480个唯一值

py 复制代码
percapitaGDP.metro.count()# 480个有效值

percapitaGDP.metro.nunique()#480个唯一值

运行如下:

设置索引(并且输出检查一下):

py 复制代码
percapitaGDP.set_index('metro',inplace = True)
percapitaGDP.head()

最后从表格查取数据:

py 复制代码
percapitaGDP.loc['AUS02: Greater Melbourne']

效果如下:

到此!,已经把Excel数据成功导入到Pandas DataFrame中,并且清除了表格中的混乱数据




小结

写本文主要是为了分享我的学习过程,也是给自己记个笔记,哪里忘记了,回来再看一眼,也可以很快的回想起来

暂时学到这,边学边写

相关推荐
数据智能老司机24 分钟前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机25 分钟前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机25 分钟前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i35 分钟前
drf初步梳理
python·django
每日AI新事件35 分钟前
python的异步函数
python
这里有鱼汤2 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook11 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室11 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三13 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
用户25191624271116 小时前
Python之语言特点
python