本文主要是总结学习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,"",np.NaN]})
#匹配SpouseAge中包含2的记录
df[df.SpouseAge.str.contains("",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,"",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知识点(一)的更多相关文章

  1. Python数据分析--Pandas知识点(三)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...

  2. Python数据分析--Pandas知识点(二)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...

  3. Python数据分析-Pandas(Series与DataFrame)

    Pandas介绍: pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. Pandas的主要功能: 1)具备对其功能的数据结构DataFrame.Series 2)集成时间序 ...

  4. python 数据分析--pandas

    接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利用pandas的DataFrames进行统计分析 ...

  5. Python数据分析Pandas库方法简介

    Pandas 入门 Pandas简介 背景:pandas是一个Python包,提供快速,灵活和富有表现力的数据结构,旨在使“关系”或“标记”数据的使用既简单又直观.它旨在成为在Python中进行实际, ...

  6. Python之Pandas知识点

    很多人都分不清Numpy,Scipy,pandas三个库的区别. 在这里简单分别一下: NumPy:数学计算库,以矩阵为基础的数学计算模块,包括基本的四则运行,方程式以及其他方面的计算什么的,纯数学: ...

  7. Python数据分析 Pandas模块 基础数据结构与简介(一)

    pandas 入门 简介 pandas 组成 = 数据面板 + 数据分析工具 poandas 把数组分为3类 一维矩阵:Series 把ndarray强大在可以存储任意数据类型可以专门处理时间数据 二 ...

  8. Python数据分析Pandas库之熊猫(10分钟二)

    pandas 10分钟教程(二) 重点发法 分组 groupby('列名') groupby(['列名1','列名2',.........]) 分组的步骤 (Splitting) 按照一些规则将数据分 ...

  9. Python数据分析Pandas库之熊猫(10分钟一)

    pandas熊猫10分钟教程 排序 df.sort_index(axis=0/1,ascending=False/True) df.sort_values(by='列名') import numpy ...

随机推荐

  1. 四则运算3+PSP

    题目要求: 1.要求在第二次实验(四则运算2)的基础上加上其他功能. 2.要求能够在每个运算式打印出来后,用户能够进行输入计算的答案,并且程序进行判断给出用户输入的答案的正确性. 3.要求实现四则混合 ...

  2. WebRequest + Https + 憑証錯誤 = 作業逾時

    前言 一般的系統一登入時,都會顯示公告訊息,我們的系統也是! 因為系統效能問題,所以就幫忙看了程式.發現,每次登入時,都會到DB取公告資料,但公告並不會因為個人而有所不同,是針對整個系統的呀! 所以就 ...

  3. 深入jUI(DWZ)

    -----------------------------------------------------------------------------主页面index.html <html& ...

  4. SQL Server--存在则更新问题

    在博客园看到一篇讨论特别多的文章“探讨SQL Server并发处理存在就更新七种解决方案”,这种业务需求很常见:如果记录存在就更新,不存在就插入. 最常见的做法: BEGIN TRANSACTION ...

  5. C++ Custom Control控件 向父窗体发送对应的消息

    向父窗体发送消息 ,这里只讲发送 WM_NOTIFY  消息, 其它消息是相同的 在 控件中的某个函数中 设置发送消息的程序 首先定义一个WM_NOTIFY消息的专用结构. NMHDR nm; nm. ...

  6. ESET官方下载地址

    官方远程下载 ESET NOD32 Antivirus(32位) ESET NOD32 Antivirus(64位) ESET Smart Security(32位) ESET Smart Secur ...

  7. Anaconda安装及配合pycharm使用

    首先到https://www.anaconda.com/download/下载合适的anaconda版本.如Windows 64bit. 下载了直接双击开始下载,一路同意下去,到选择安装的目录.这里选 ...

  8. 构建缓存gradle

    结合Kotlin使用Gradle build cache 宛丘之上兮 关注 2018.03.11 00:21* 字数 1177 阅读 505评论 5喜欢 4 在2017年4月,Gradle发布了bui ...

  9. 2-glance 部署

    1. mysql 创建数据库和用户 create database glance; grant all privileges on glance.* to 'glance'@'localhost' i ...

  10. pipy国内镜像的网址

    pipy国内镜像目前有:豆瓣 http://pypi.douban.com/simple/阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https: ...