今天德天和大家一起玩转数据清洗
学以致用,是大家一致认同的观点,因为这样做的好处很多,一则可以检验学习效果,二则可以拓宽学习思路,三则可以更加灵活多变的应用所学,今天就让我们系统化的通过python中的两个库,一个是CSV,另一个是PANDAS
话不多说:上干货!
1、建立一个数据源CSV
import csv
path= 'c:\\Users\\Administrator\\pandas_csv\\qingxi_data.csv'
with open(path,"w",newline="")as f:
write = csv.writer(f)
row1=["102QS-25","200mm",300,"20","600w",40]
row2=["200QS-35","100mm",150,"15","500w",30]
row3=["170QS-15","80m",120,"10","500w",20]
row4=["180QS-10","220mm",320,"35","800w",45]
row5=["195QS-20","250m",350,"40","1000w",50]
write.writerows((row1,row2,row3))
- 正常情况我们是应用已知数据进行数据操作,但是这里我们还是自造数据,毕竟这样我们可以进一步熟练其它库的命令操作
知识索引: - import csv,#导入库
- path="…\qingxi_data.csv" #建立路径
- with open(path,“w”,newline="") as f: with open-----+参数w:建立写文件,f 文件新名字
- csv.writer(f) 使文件可写,write----是写文件的实例
- write.writerows((row1,row2,row3))------实例write,方法writerows,完成写入内容操作。
至此一个自建的源文件CSV,就制作完成了!(小开心,对不对?)
2、导入新库,读入数据源
开讲前言:
这一次我们是要把第1步,建好的文件读取出来,这里要用到另一个库pandas,同时我们要把系统中无标题的源文件换成阿拉伯数字,需要在读取中添加参数head=None,制造了一个缺失文件头的源,然后我们把它的文件头是:
清洗头:[“型号”,“出水口径”,“流量”,“扬程”,“功率”,“颗粒度”]
添加到,导入文件中,从而完成清洗第1步。
3、开洗!
导入文件
import pandas as pd
pf = pd.read_csv(path,header=None)
pf.head()
增加头名称
import pandas as pd
column_names=["型号","出水口径","流量","扬程","功率","颗粒度"]
pf = pd.read_csv(path,names=column_names)
pf.head()
知识索引
- import pandas as pd #导入pandas 库 ,用as 另命名pd
- column_names=[“型号”,“出水口径”,“流量”,“扬程”,“功率”,“颗粒度”] #建立清洗头列表
- pd.read_csv() #读取路径文件path,增加清洗头names=column_names 把头补全完整
4、清洗替换
大家看一下出水口径这里,其中2行,4行,分别有两个单位不小心写错了,我们要替换成正确的结果
pf["出水口径"] = pf["出水口径"].str.replace("80m","80mm")
pf.head()
pf["出水口径"] = pf["出水口径"].str.replace("250m","250mm")
pf.head()
知识索引:
- 错误的数据源:位置"出水口径",80m,250m ,修改单位m—改成:mm
- .str.replace()利用字符模块下的替换命令完成修改
5、单列拆分
问题:
大家看到型号这里是两个部分组成,中间为空格,我们希望把这部分数据分割成两列,名字分别为“型号”,“批次”,该如何处理呢?
#拆分后变成型号和批次
pf[["型号","批次"]] = pf["型号"].str.split(expand=True)
知识索引:
- 通过上面str.split(expand=True),完成了按空格拆分,同时把新列自动添加到最后一列的位置
6、知识回顾:按升序排列
顺便和大家复习一下,如何借助相关命令进行数据的排序,如果忘记可以
点链接查看-数据分析5-3
7、知识拓展:利用DataFrame访问内容
处理好的数据,我们常常需要对他们灵活的操作,pandas 给我们提供了一个很好用的命令loc,但是我们想要使用这个命令,需要做一步操作,把现有的文件,加入DataFrame中,成为可访问对象。
知识索引:
- 如何使用DataFrame()命令
- 如何使用loc函数,
2-1 pf1.loc[0:3] 表示从上到下取四行数据进行访问loc为竖直方向,取行的范围。
2-2 pf1.loc[2] 表示仅取第3行数据,结果见下图。
2-3 pf1.loc[::-1] 按照行的索引反向排列
pf1 = pd.DataFrame(pf)
pf2 = pf1.loc[0:3]
pf2.head()
2-1:输出结果
pf1 = pd.DataFrame(pf)
pf2 = pf1.loc[2]
pf2.head()
2-2:输出结果
pf1 = pd.DataFrame(pf)
pf2 = pf1.loc[::-1]
pf2.head()
2-3:输出结果