文章目录
- 一、啥是数据清洗
- 二、将表格数据导入pandas中
- 1. 准备工作
- 2. 引入csv文件
- 2.1 引入pandas库
- 2.2 读取文件/修改名称
- 3.2 快速浏览数据
- 2.4 修改名字
- 2.5 查找缺失值
- 2.6 删除缺失值
- 3. 引入Excel文件
- 3.1 引入pandas库
- 3.2 读取Excel文件的人均GDP数据
- 3.3 查看数据类型和non-null值计数
- 3.4 重命名并删除空格
- 3.5 数据类型转换
- 3.6 摘要统计信息
- 3.7 删除缺失值
- 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库并设置环境,更轻松地查看输出
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,以减少过程中的内存使用量
代码如下:
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查看前几条数据,显示所有列的数据类型以及行和列的数量
查看前几行数据:
landtempssample.head(7)
效果如下:
查看行和列的类型:
landtempssample.dtypes
效果如下:
查看行和列的数量:
landtempssample.shape
效果如下:
2.4 修改名字
把日期列修改一个更好的名字,并且查看月份平均温度的摘要统计信息
landtempssample.rename(columns={'month_year':'measuredate'},inplace = True)
landtempssample.dtypes
landtempssample.avgtemp.describe()
效果如下:
2.5 查找缺失值
使用isnull可以为每个列中的每个缺失值返回True,而在没有缺失值时返回False
将isnull和sum链接在一起时即可计算每一列中的缺失值数
landtempssample.isnull().sum()
具体效果如下:
2.6 删除缺失值
使用subset参数高速dropna删除avgtemp列包含缺失值的行,将inplace设置为True
landtempssample.dropna(subset=['avgtemp'],inplace=True)
landtempssample.shape
效果如下:
3. 引入Excel文件
3.1 引入pandas库
import pandas as pd
3.2 读取Excel文件的人均GDP数据
选择包含所需的数据的工作表,但跳过不需要的行和列,使用sheet_name参数即可指定工作表,将skiprows设置为4,skipfooter设置为1,以跳过前四行,和最后一行。设置usecols参数的值,以获取A列,从列到T列的数据
实例如下:
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值计数:
实例:
percapitaGDP.info()
3.4 重命名并删除空格
将Year列重命名为metro,并且检查前导空格用startswith(‘’),使用endswith(‘’)检查后导空格,判断是否存在空格用any(),如果有就使用strip来删除前导和后导空格
重命名
percapitaGDP.rename(columns={'year':'metro'},inplace=True)
测试前导空格
percapitaGDP.metro.str.startswith('').any()
测试后导空格
percapitaGDP.metro.str.endswith('').any()
删除前导和末尾空格
percapitaGDP.metro = percapitaGDP.metro.str.strip()
具体如下:
3.5 数据类型转换
把所有年份的GDP年份列(2001-2018),并将数据类型从object转换为float,即使存在字符数据,也强制转换(目的是为了让这些字符串变为缺失值)最后,重命名年份列,为了更好地展示数据
具体如下:
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检查一下:
percapitaGDP.dtypes
3.6 摘要统计信息
使用describe为表中所有数字数据生成摘要统计信息
percapitaGDP.describe()
运行结果如下:
3.7 删除缺失值
- 使用dropna的subset参数检查所有列
- 使用how指定仅当subset所有列缺失时才删除行
- 最后使用shape显示结果行数和列数
percapitaGDP.dropna(subset = percapitaGDP.columns[1:],how="all",inplace = True)
percapitaGDP.describe()
具体如下:
percapitaGDP.head()
如下图:
最后用shape显示行数列数
percapitaGDP.shape
运行如下:
3.8 设置索引
使用metro列设置索引
在设置索引之气那,确认metro列有480个有效值,并且有480个唯一值
percapitaGDP.metro.count()# 480个有效值
percapitaGDP.metro.nunique()#480个唯一值
运行如下:
设置索引(并且输出检查一下):
percapitaGDP.set_index('metro',inplace = True)
percapitaGDP.head()
最后从表格查取数据:
percapitaGDP.loc['AUS02: Greater Melbourne']
效果如下:
到此!,已经把Excel数据成功导入到Pandas DataFrame中,并且清除了表格中的混乱数据
小结
写本文主要是为了分享我的学习过程,也是给自己记个笔记,哪里忘记了,回来再看一眼,也可以很快的回想起来