Python数据分析库-Pandas在数据分析中的知识点(一)
各位客官姥爷好,欢迎回来。上节我们简单介绍了Pandas名称的由来,以及后续的安装工作。相信大家都有跟着一起安装,既然装好了那就用起来吧,本节我们来看看Pandas在数据分析过程会涉及到哪些常用的知识点。
01
重复数据的处理
1. 重复数据产生的原因
重复数据一般是由代码bug造成多次采集、录入人员的重复录入等原因造成。当然也有部分业务本身就有可能产生重复数据。
2. 重复数据的处理
大致分为两种方法:删除重复值和不做处理(或仅打标记)
1)删除重复数据
在Pandas里使用drop_duplicates函数用来删除数据表中重复的记录。
import pandas as pd
df = pd.DataFrame({"ID": ["A1000","A1001","A1002", "A1002"],
"departmentId": [60001,60001, 60001, 60001]})
df.drop_duplicates()
2)不做处理(或仅打标记)
结合自身的业务发现这部分重复数据是正常的,这时可以选择不做处理,也可以选择打标记(目的是方便后续分析产生重复数据的业务特征)
02
缺失值的处理
1. 缺失值产生的原因
主要原因可以分为两种:人为原因和机械原因.
1) 人为原因:由于人的主观意识造成数据的缺失,比如数据录入人员的疏漏;
2) 机械原因:由于机械故障导致的数据收集或者数据保存失败从而造成数据的缺失。
2. 缺失值的处理
缺失值的处理方式通常有三种:补齐缺失值,删除缺失值,保留缺失值。
1)补齐缺失值:通过建好的数据模型或者数据自身的特征计算出来的值去填充缺失值,例如样本平均值。
在Pandas中使用fillna()函数对缺失值进行填充,使用mean()函数计算样本平均值。
import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':['A10001', 'A10002', 'A10003', 'A10004'],
"Salary":[11560, np.NaN, 12988,12080]})
#用Salary字段的样本均值填充缺失值
df["Salary"] = df["Salary"].fillna(df["Salary"].mean())
df
2)删除缺失值:当数据量大时且缺失值占比较小可选用删除缺失值的记录。
示例: 删除entrytime中缺失的值,采用dropna函数对缺失值进行删除:
import pandas as pd
df = pd.DataFrame({"ID": ["A1000","A1001","A1002"],
"entrytime": ["2015-05-06",pd.NaT,"2016-07-01" ]})
df.dropna()
3) 保留缺失值:在实际业务中可能会有一些非必填字段,而且这部分缺失属于一种正常现象的话,则在这里就可以选择保留下来。有时候缺失也是一种方向。
03
删除前后空格
有时候我们拿到的数据特别杂乱,比如好多字段中都有前/后空格,这时候需要借助Pandas的字符属性的strip()函数进行删除。
import pandas as pd
df = pd.DataFrame({"ID": ["A1000","A1001","A1002"],
"Surname": [" Zhao ","Qian"," Sun " ]})
df["Surname"] = df["Surname"].str.strip()
df
04
查看数据类型
通常拿到数据之后,一般都会先看一下各个字段的数据类型,方便后续处理时选择方法。
在Pandas中查看所有列的数据类型使用dtypes,查看单列使用dtype:
import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]})
#查看所有列的数据类型
df.dtypes
#查看单列的数据类型
df["ID"].dtype
05
修改数据类型
在知道了字段的数据类型之后,但有时这个类型不利于我们数据处理,这时可以对其数据类型进行修改,在Pandas中使用astype()函数对数据类型修改。
import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]})
#将ID列的类型转化为字符串的格式
df["ID"].astype(str)
06
字段的截取
如果想提取前两位字符,可以选择使用Pandas的字符属性的slice(start, end)函数可完成字段中字符的截取(即截取从start到end-1这些字符)比如截取前两位slice(0, 2).
import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]})
#需要将ID列的类型转换为字符串, 否则无法使用slice()函数
df["ID"]= df["ID"].astype(str)
#抽取ID前两位
df["ID"].str.slice(0,2)
07
字段的拆分
有时候拿到的数据里面包含各种分隔符,这时候可以考虑使用Pandas的字符属性的split()函数进行字段的拆分。
split(pat=None, n = -1, expand=True)函数包含三个参数:
第一个参数则是分隔的字符串, 默认是以空格分隔
第二个参数则是分隔符使用的次数, 默认分隔所有
第三个参数若是True, 则在不同的列展开, 否则以序列的形式显示.
import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]})
#对Surname_Age字段进行拆分
df_new = df["Surname_Age"].str.split("_", expand =True)
df_new
08
字段的命名
字段的重命名有两种方式:一种是使用rename()函数, 另一种是直接设置columns参数。
import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]})
#第一种方法使用rename()函数
# df_new = df["Surname_Age"].str.split("_", expand =True).rename(columns={0: "Surname", 1: "Age"})
# df_new
#第二种方法直接设置columns参数
df_new = df["Surname_Age"].str.split("_", expand =True)
df_new.columns = ["Surname","Age"]
df_new
09
字段的合并
在Pandas中使用merge()函数对字段进行合并操作。
import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]})
df_new = df["Surname_Age"].str.split("_", expand =True)
df_new.columns = ["Surname","Age"]
#使用merge函数对两表的字段进行合并操作.
pd.merge(df, df_new, left_index =True, right_index=True)
10
字段的删除
有时候需要删除字段,比如与此次分析无关,再比如缺失值太多且无法重新采集可考虑删除该字段。在Pandas中利用drop()函数对字段进行删除。
import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]})
df_new = df["Surname_Age"].str.split("_", expand =True)
df_new.columns = ["Surname","Age"]
df_mer= pd.merge(df, df_new, left_index =True, right_index=True)
#drop()删除字段,第一个参数指要删除的字段,axis=1表示字段所在列,inplace为True表示在当前表执行删除.
df_mer.drop("Surname_Age", axis = 1, inplace =True)
df_mer
删除Surname_Age字段后的结果:
以上就是本次的分享,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!