1.数据概览

第一步当然是把缺失的数据找出来, Pandas 找缺失数据可以使用 info() 这个方法(这里选用的数据源还是前面一篇文章所使用的 Excel ,小编这里简单的随机删除掉几个数据)

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx")
print(df) # 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215.0 0 118.0 0 2019-11-23 23:00:10
1 juejin NaN 0 -2.0 1 2019-11-23 23:00:03
2 csdn 1652.0 69 0.0 24 2019-11-23 23:00:02
3 cnblog 650.0 3 NaN 0 2019-11-22 23:00:15
4 juejin 272.0 3 -23.0 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212.0 0 -1.0 2 2020-02-20 23:00:02
404 csdn 1602.0 1 0.0 1 2020-02-20 23:00:01
405 cnblog 19.0 0 41.0 0 2020-02-21 23:00:05
406 juejin 125.0 1 -4.0 0 2020-02-21 23:00:02
407 csdn 1475.0 8 0.0 3 2020-02-21 23:00:02 [408 rows x 6 columns] print(df.info()) # 输出结果
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 408 entries, 0 to 407
Data columns (total 6 columns):
plantform 408 non-null object
read_num 406 non-null float64
fans_num 408 non-null int64
rank_num 407 non-null float64
like_num 408 non-null int64
create_date 408 non-null datetime64[ns]
dtypes: datetime64[ns](1), float64(2), int64(2), object(1)
memory usage: 19.2+ KB

我们还可以使用另一个更加直观的方式来获取缺失的数据 isnull() ,如果是缺失的值,会返回 True ,如果不是则会返回 False

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx")
print(df.isnull()) # 输出结果
plantform read_num fans_num rank_num like_num create_date
0 False False False False False False
1 False True False False False False
2 False False False False False False
3 False False False True False False
4 False False False False False False
.. ... ... ... ... ... ...
403 False False False False False False
404 False False False False False False
405 False False False False False False
406 False False False False False False
407 False False False False False False [408 rows x 6 columns]

利用isnull().sum()可以直接显示每个列缺失的总数

2.重命名列

为了重命名列,我们将使用DataFrame的rename()方法,允许你以一个映射(这里是一个字典)重新标记一个轴。

让我们开始定义一个字典来将现在的列名称(键)映射到更多的可用列名称(字典的值)。

>>> new_names =  {'Unnamed: 0': 'Country',
... '? Summer': 'Summer Olympics',
... '01 !': 'Gold',
... '02 !': 'Silver',
... '03 !': 'Bronze',
... '? Winter': 'Winter Olympics',
... '01 !.1': 'Gold.1',
... '02 !.1': 'Silver.1',
... '03 !.1': 'Bronze.1',
... '? Games': '# Games',
... '01 !.2': 'Gold.2',
... '02 !.2': 'Silver.2',
... '03 !.2': 'Bronze.2'}

我们在对象上调用rename()函数:

>>> olympics_df.rename(columns=new_names, inplace=True)

设置inplaceTrue可以让我们的改变直接反映在对象上。让我们看看是否正确:

>>> olympics_df.head()
Country Summer Olympics Gold Silver Bronze Total \
0 Afghanistan (AFG) 13 0 0 2 2
1 Algeria (ALG) 12 5 2 8 15
2 Argentina (ARG) 23 18 24 28 70
3 Armenia (ARM) 5 1 2 9 12
4 Australasia (ANZ) [ANZ] 2 3 4 5 12 Winter Olympics Gold.1 Silver.1 Bronze.1 Total.1 # Games Gold.2 \
0 0 0 0 0 0 13 0
1 3 0 0 0 0 15 5
2 18 0 0 0 0 41 18
3 6 0 0 0 0 11 1
4 0 0 0 0 0 2 3 Silver.2 Bronze.2 Combined total
0 0 2 2
1 2 8 15
2 24 28 70
3 2 9 12
4 4 5 12

3.缺失数据处理

3.1 删除

我们找到了缺失的数据,接下来就是对这部分数据进行删除操作了, Pandas 同样为我们提供了一个现成的方法 dropna() 。

dropna() 这个方法会默认删除缺失数据的行,就是这一行只要有缺失数据,整行都会删除:

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx") print(df.dropna()) # 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215.0 0 118.0 0 2019-11-23 23:00:10
2 csdn 1652.0 69 0.0 24 2019-11-23 23:00:02
4 juejin 272.0 3 -23.0 1 2019-11-22 23:00:02
5 csdn 2202.0 129 0.0 37 2019-11-22 23:00:01
7 csdn 1621.0 76 0.0 27 2019-11-21 23:00:02
.. ... ... ... ... ... ...
403 juejin 212.0 0 -1.0 2 2020-02-20 23:00:02
404 csdn 1602.0 1 0.0 1 2020-02-20 23:00:01
405 cnblog 19.0 0 41.0 0 2020-02-21 23:00:05
406 juejin 125.0 1 -4.0 0 2020-02-21 23:00:02
407 csdn 1475.0 8 0.0 3 2020-02-21 23:00:02 [405 rows x 6 columns]

在删除缺失行的时候还会有一种情况,就是整行数据全都缺失,我们还可以只删除整行数据全缺失,如果只是有缺失值的数据保留,这时我们可以用到 dropna() 的一个参数 how="any" :

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx") print(df.dropna(how="any")) # 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215.0 0 118.0 0 2019-11-23 23:00:10
1 juejin NaN 0 -2.0 1 2019-11-23 23:00:03
2 csdn 1652.0 69 0.0 24 2019-11-23 23:00:02
3 cnblog 650.0 3 NaN 0 2019-11-22 23:00:15
4 juejin 272.0 3 -23.0 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212.0 0 -1.0 2 2020-02-20 23:00:02
404 csdn 1602.0 1 0.0 1 2020-02-20 23:00:01
405 cnblog 19.0 0 41.0 0 2020-02-21 23:00:05
406 juejin 125.0 1 -4.0 0 2020-02-21 23:00:02
407 csdn 1475.0 8 0.0 3 2020-02-21 23:00:02 [408 rows x 6 columns]

因为小编的数据没有整行缺失的,可以看到这里又打印了所有的数据。

3.2 缺失数据填充

fillna()

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx") print(df.fillna(0)) # 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215.0 0 118.0 0 2019-11-23 23:00:10
1 juejin 0.0 0 -2.0 1 2019-11-23 23:00:03
2 csdn 1652.0 69 0.0 24 2019-11-23 23:00:02
3 cnblog 650.0 3 0.0 0 2019-11-22 23:00:15
4 juejin 272.0 3 -23.0 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212.0 0 -1.0 2 2020-02-20 23:00:02
404 csdn 1602.0 1 0.0 1 2020-02-20 23:00:01
405 cnblog 19.0 0 41.0 0 2020-02-21 23:00:05
406 juejin 125.0 1 -4.0 0 2020-02-21 23:00:02
407 csdn 1475.0 8 0.0 3 2020-02-21 23:00:02 [408 rows x 6 columns]

上面的示例是将所有的缺失数据全都填充成了 0 ,但是如果我们只想填充其中的一列数据呢?

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx") print(df.fillna({'read_num': 10})) # 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215.0 0 118.0 0 2019-11-23 23:00:10
1 juejin 10.0 0 -2.0 1 2019-11-23 23:00:03
2 csdn 1652.0 69 0.0 24 2019-11-23 23:00:02
3 cnblog 650.0 3 NaN 0 2019-11-22 23:00:15
4 juejin 272.0 3 -23.0 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212.0 0 -1.0 2 2020-02-20 23:00:02
404 csdn 1602.0 1 0.0 1 2020-02-20 23:00:01
405 cnblog 19.0 0 41.0 0 2020-02-21 23:00:05
406 juejin 125.0 1 -4.0 0 2020-02-21 23:00:02
407 csdn 1475.0 8 0.0 3 2020-02-21 23:00:02 [408 rows x 6 columns]

为了便于区分,小编这里只补充了 read_num 这一列,将默认填充数值补充成了 10 。

4 重复数据处理

如果要识别和删除DataFrame中的重复行,有两种方法可以提供帮助:duplicateddrop_duplicates。每个都将用于标识重复行的列作为参数。

  • duplicated 返回一个布尔向量,其长度为行数,表示行是否重复。
  • drop_duplicates 删除重复的行。

默认情况下,重复集的第一个观察行被认为是唯一的,但每个方法都有一个keep参数来指定要保留的目标。

  • keep='first' (默认值):标记/删除重复项,第一次出现除外。
  • keep='last':标记/删除重复项,除了最后一次出现。
  • keep=False:标记/删除所有重复项。

5 数据类型转化

看下当前数据表中的数据类型,这里使用的 dtypes ,示例如下:

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx")
print(df) # 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215.0 0 118.0 0 2019-11-23 23:00:10
1 cnblog 215.0 0 118.0 0 2019-11-23 23:00:10
2 juejin NaN 0 -2.0 1 2019-11-23 23:00:03
3 csdn 1652.0 69 0.0 24 2019-11-23 23:00:02
4 cnblog 650.0 3 NaN 0 2019-11-22 23:00:15
.. ... ... ... ... ... ...
404 juejin 212.0 0 -1.0 2 2020-02-20 23:00:02
405 csdn 1602.0 1 0.0 1 2020-02-20 23:00:01
406 cnblog 19.0 0 41.0 0 2020-02-21 23:00:05
407 juejin 125.0 1 -4.0 0 2020-02-21 23:00:02
408 csdn 1475.0 8 0.0 3 2020-02-21 23:00:02 print(df.dtypes) # 输出结果
plantform object
read_num float64
fans_num int64
rank_num float64
like_num int64
create_date datetime64[ns]
dtype: object

当然,我们如果想单独知道某一列的数据类型,也可以这么用:

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx")
print(df['read_num'].dtypes) # 输出结果
float64

当我们需要转换数据类型的时候,可以使用 astype() 这个方法,在使用的时候讲需要转化的目标类型写在 astype() 后面括号里即可

import pandas as pd

# 相对路径
df = pd.read_excel("result_data.xlsx")
print(df['fans_num'].astype('float64')) # 输出结果
0 0.0
1 0.0
2 0.0
3 69.0
4 3.0
...
404 0.0
405 1.0
406 0.0
407 1.0
408 8.0
Name: fans_num, Length: 409, dtype: float64

6 添加索引

import pandas as pd

df1 = pd.read_excel("demo.xlsx")
df1.columns = ['编号', '序号', '姓名', '消费金额']
print(df1) # 输出结果
编号 序号 姓名 消费金额
0 A2 1002 小王 2000
1 A3 1003 小明 3000
2 A4 1004 小朱 4000
3 A5 1005 小黑 5000

 set_index() 这个方法,在括号中指明需要使用的列名即可:

import pandas as pd

df1 = pd.read_excel("demo.xlsx")
print(df1.set_index('编号')) # 输出结果
序号 姓名 消费金额
编号
A2 1002 小王 2000
A3 1003 小明 3000
A4 1004 小朱 4000
A5 1005 小黑 5000

7.使用 .str() 方法来清洗 columns

.str属性是pandas里的一种提升字符串操作速度的方法,并有大量的Python字符串或编译的正则表达式上的小操作,例如.split(),.replace(),和.capitalize()

将我们数据中所有的某一列字符数据改成大写:

data['movie_title'].str.upper()

pandas.Series.str.extract 正则提取数据

8.使用 DataFrame.applymap() 函数按元素的清洗整个数据集

>>> def get_citystate(item):
... if ' (' in item:
... return item[:item.find(' (')]
... elif '[' in item:
... return item[:item.find('[')]
... else:
... return item

pandas的applymap()只用一个参数,就是要应用到每个元素上的函数(callable)

>>> towns_df = towns_df.applymap(get_citystate)

数据可视化基础专题(八):Pandas基础(七) 数据清洗与预处理相关的更多相关文章

  1. 数据可视化实例(八): 边缘直方图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter6/chapter6 边缘直方图 (Marginal Histogram) 边缘直方图具有沿 X 和 Y ...

  2. web 部署专题(八):Nginx 反向代理中cookie相关问题

    问题3:认证问题 Domino服务器中,通过写了一些接口代码,提供RESTful的服务,来对手机端进行提供服务.但是由于原来的环境,没有SSO,而且不通过认证,没法访问到Domino里面的接口代码. ...

  3. 前端er必须掌握的数据可视化技术

    又是一月结束,打工人准时准点的汇报工作如期和大家见面啦.提到汇报,必不可少的一部分就是数据的汇总.分析. 作为一名合格的社会人,我们每天都在工作.生活.学习中和数字打交道.小到量化的工作内容,大到具体 ...

  4. Python数据可视化基础讲解

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:爱数据学习社 首先,要知道我们用哪些库来画图? matplotlib ...

  5. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  6. 数据可视化(7)--D3基础

    一直想写写D3,觉得D3真心比较强大,基本上你能想出来的图表都能绘制出来,只不过使用起来比前几个要稍麻烦一点. 正好最近读完了<数据可视化实战>,将关于D3的知识梳理了一遍,写这篇博客记录 ...

  7. python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

  8. 科学计算三维可视化---Mlab基础(数据可视化)

    推文:科学计算三维可视化---TVTK库可视化实例 使用相关函数:科学计算三维可视化---Mlab基础(管线控制函数) 一:mlab.pipeline中标量数据可视化 通过持续实例,来感受mlab对数 ...

  9. 数据可视化-svg入门基础(二)

    接上一篇:数据可视化-svg入门基础(一),基础一主要是介绍了svg概念,元素样式设置等. svg是(scalable vector graphic)伸缩矢量图像. 一.目录 (1)图形元素 (2)文 ...

随机推荐

  1. 附022.Kubernetes_v1.18.3高可用部署架构一

    kubeadm介绍 kubeadm概述 参考附003.Kubeadm部署Kubernetes. kubeadm功能 参考附003.Kubeadm部署Kubernetes. 本方案描述 本方案采用kub ...

  2. min_25筛入门

    目录 1.什么是min_25筛 2.前置知识 2.1.数论函数 2.2.埃拉托色尼筛 2.3.欧拉筛 3.min_25筛 3.1.计算质数贡献 3.2.计算总贡献 3.3.实现 4.例题 4.1.[L ...

  3. SpringCloud Alibaba (一):序言

    为什么要转用SpringCloud Alibaba? Spring Cloud Netflix项目进入维护模式 在2018年底时,Netflix宣布Hystrix进入维护模式.自2016年以来,Rib ...

  4. Codeblocks 解决界面模糊的方法

    之前用16.01不愿意升17.12的原因就是升级后界面变得非常模糊感觉很难看,找了个方法把这个问题解决了,这个方法能解决绝大多数软件打开后界面模糊的问题 (DEV模糊也能解决). 1.安装软件后桌面会 ...

  5. Java 设置PDF平铺图片背景(水印)

    一.概述及环境准备 本文介绍使用免费版PDF库-Free Spire.PDF for Java加载图片来设置成PDF平铺图片背景的效果,也可以作为平铺图片水印来使用:编辑代码前,需要先导入jar文件, ...

  6. Python中的计时函数

    我们已经知道使用cell magic或者line magic里面的%%time或者%time能够对Python程序中某一模块的运行时间进行计算,下面是一种更为灵活的计时方法,利用了计时函数time.t ...

  7. 在tp5.1中获取所有控制器的文件名和所有控制器下的方法名

    我在这块做的是下拉框改变控制器然后ajax去调用获取方法 上代码 private function redController(){//获取当前控制器目录下所有的文件名 $arr=scandir('. ...

  8. rest_framework django 简单使用(数据库创建数据, 覆盖数据, 其他的大同小异)

    事先说几个坑:数据库定义字段时候,不要定义name 要定义 username 首先, 定义model(简单定义) from django.db import models from django.co ...

  9. SLAM:使用EVO测评ORBSLAM2

    SLAM:使用EVO测评ORBSLAM2 EVO是用来评估SLAM系统测量数据以及输出估计优劣的Python工具,详细说明请参照: https://github.com/MichaelGrupp/ev ...

  10. java 基本类型详解 及 常见问题

    鄙人不才,基础不好,趁着闲时简单学习一下,仅作学习分享,如有不正确地方还请各位看客不吝指出. 常用的基本类型有:byte(8).short(16).char(16,取值从0-65535[2^16-1] ...