本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘
1. 重复值的处理
利用drop_duplicates()函数删除数据表中重复多余的记录, 比如删除重复多余的ID.
import pandas as pd df = pd.DataFrame({"ID": ["A1000","A1001","A1002", "A1002"], "departmentId": [60001,60001, 60001, 60001]}) df.drop_duplicates()
2. 缺失值的处理
缺失值是数据中因缺少信息而造成的数据聚类, 分组, 截断等
2.1 缺失值产生的原因
主要原因可以分为两种: 人为原因和机械原因.
1) 人为原因: 由于人的主观失误造成数据的缺失, 比如数据录入人员的疏漏;
2) 机械原因: 由于机械故障导致的数据收集或者数据保存失败从而造成数据的缺失.
2.2 缺失值的处理方式
缺失值的处理方式通常有三种: 补齐缺失值, 删除缺失值, 删除缺失值, 保留缺失值.
1) 补齐缺失值: 使用计算出来的值去填充缺失值, 例如样本平均值.
使用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) 保留缺失值.
3. 删除前后空格
使用strip()函数删除前后空格.
import pandas as pd df = pd.DataFrame({"ID": ["A1000","A1001","A1002"], "Surname": [" Zhao ","Qian"," Sun " ]}) df["Surname"] = df["Surname"].str.strip() df
4. 查看数据类型
查看所有列的数据类型使用dtypes, 查看单列使用dtype, 具体用法如下:
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]}) #查看所有列的数据类型 df.dtypes #查看单列的数据类型 df["ID"].dtype
5. 修改数据类型
使用astype()函数对数据类型进行修改, 用法如下
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]}) #将ID列的类型转化为字符串的格式 df["ID"].astype(str)
6. 字段的抽取
使用slice(start, end)函数可完成字段的抽取, 注意start是从0开始且不包含end. 比如抽取前两位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)
7. 字段的拆分
使用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
8. 字段的命名
有两种方式一种是使用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
两种方式同样的结果:
9. 字段的合并
使用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. 字段的删除
利用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字段成功:
11. 记录的抽取
1) 关系运算: df[df.字段名 关系运算符 数值], 比如抽取年龄大于30岁的记录.
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) df_mer.drop("Surname_Age", axis = 1, inplace =True) #将Age字段数据类型转化为整型 df_mer["Age"] = df_mer["Age"].astype(int) #抽取Age中大于30的记录 df_mer[df_mer.Age > 30]
2) 范围运算: df[df.字段名.between(s1, s2)], 注意既包含s1又包含s2, 比如抽取年龄大于等于23小于等于28的记录.
df_mer[df_mer.Age.between(23,28)]
3) 逻辑运算: 与(&) 或(|) 非(not)
比如上面的范围运算df_mer[df_mer.Age.between(23,28)]就等同于df_mer[(df_mer.Age >= 23) & (df_mer.Age <= 28)]
df_mer[(df_mer.Age >= 23 ) & (df_mer.Age <= 28)]
4) 字符匹配: df[df.字段名.str.contains("字符", case = True, na =False)] contains()函数中case=True表示区分大小写, 默认为True; na = False表示不匹配缺失值.
import pandas as pd import numpy as np df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28"],"SpouseAge":[np.NaN,"32",np.NaN]}) #匹配SpouseAge中包含2的记录 df[df.SpouseAge.str.contains("2",na = False)]
当na改为True时, 结果为:
5) 缺失值匹配:df[pd.isnull(df.字段名)]表示匹配该字段中有缺失值的记录.
import pandas as pd import numpy as np df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28"],"SpouseAge":[np.NaN,"32",np.NaN]}) #匹配SpouseAge中有缺失值的记录 df[pd.isnull(df.SpouseAge)]
12.记录的合并
使用concat()函数可以将两个或者多个数据表的记录合并一起, 用法: pandas.concat([df1, df2, df3.....])
import pandas as pd df1 = pd.DataFrame({"ID": ["A10006","A10001"],"Salary": [12000, 20000]}) df2 = pd.DataFrame({"ID": ["A10008"], "Salary": [10000]}) #使用concat()函数将df1与df2的记录进行合并 pd.concat([df1, df2])
以上是部分内容, 还会持续总结更新....
以上所述是小编给大家介绍的Python数据分析--Pandas知识点详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍Python切片知识解析,包括了Python切片知识解析的使用技巧和注意事项,需要的朋友参考一下 切片原型 strs = ‘abcdefg' Strs[start: end:step] 切片的三个参数分别表开始,结束,步长 第一位下标为0,end位不取,如strs[1:3] = ‘bc' 如果start,end超出现有数组范围,按实际范围截断strs[-100:100]='abcde
大家好,欢迎阅读 Python 和 Pandas 数据分析系列教程。 Pandas 是一个 Python 模块,Python 是我们要使用的编程语言。Pandas 模块是一个高性能,高效率,高水平的数据分析库。
本文向大家介绍python 默认参数相关知识详解,包括了python 默认参数相关知识详解的使用技巧和注意事项,需要的朋友参考一下 最常见的一种形式是的是为一个或者多个参数指定默认值,这会创建一个可以使用比定义时允许的参数更少的参数调用的函数, 可以用以下三种调用方式: ask_ok('Do you really want to quit?') ask_ok('OK to overwrite th
本文向大家介绍使用Python Pandas进行数据分析,包括了使用Python Pandas进行数据分析的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将看到使用Python pandas库进行的数据分析。图书馆的熊猫都是用C语言编写的。因此,我们在速度上没有任何问题。它以数据分析而闻名。我们在熊猫中有两种类型的数据存储结构。它们是Series和DataFrame。让我们一一看。 1.
本文向大家介绍python语言元素知识点详解,包括了python语言元素知识点详解的使用技巧和注意事项,需要的朋友参考一下 指令和程序 计算机的硬件系统通常由五大部件构成,包括:运算器、控制器、存储器、输入设备和输出设备。其中,运算器和控制器放在一起就是我们通常所说的中央处理器,它的功能是执行各种运算和控制指令以及处理计算机软件中的数据。我们通常所说的程序实际上就是指令的集合,我们程序就是将一系列
本文向大家介绍Python解析多帧dicom数据详解,包括了Python解析多帧dicom数据详解的使用技巧和注意事项,需要的朋友参考一下 概述 pydicom是一个常用python DICOM parser。但是,没有提供解析多帧图的示例。本文结合相关函数和DICOM知识做一个简单说明。 DICOM多帧数据存储 DICOM标准中关于多帧数据存储的最重要一部分说明是PS3.5 Annex A.4