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. pc端网站如何自动跳转到移动wap端网站

    <script type="text/javascript"> var uaTest = /Android|webOS|Windows Phone|iPhone|ucw ...

  2. Trouble and solution

    Prevent the CTRL from rebooting in loop killall scm watch echo 1 > /dev/watchdog& Install Git ...

  3. 解决Zabbix 5.0不能选择中文和中文乱码问题

    Zabbix web界面不能选择中文,提示: You are not able to choose some of the languages, because locales for them ar ...

  4. 如何利用Excel设计一个唱票统计系统?

    具体操作如下: 首先需要一个如下的数据结构. 唱票数G列区域,不能手动输入候选人票数,这样很不方便,所以我们需要一个窗体控件,用点击鼠标的方法来实现唱票.在“开发工具-插入-数值调节钮”下图3处,然后 ...

  5. Jmeter(十) - 从入门到精通 - JMeter逻辑控制器 - 中篇(详解教程)

    1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...

  6. Git 居然可以用来跟女神聊天?

    Git 是用来做啥的?想必码农朋友都知道,Git 是版本控制软件,是软件开发过程中团队协作不可或缺的软件. 但是,作为版本控制软件的 Git ,能跟聊天工具扯上关系吗?这二者似乎毫无关系,但脑洞大开的 ...

  7. Java学习笔记4(多线程)

    多线程 多个程序块同时运行的现象被称作并发执行.多线程就是指一个应用程序中有多条并发执行的线索,每条线索都被称作一条线程,它们会交替执行,彼此间可以进行通信. 进程:在一个操作系统中,每个独立执行的程 ...

  8. SSH网上商城三

    现在我们要实现下面的需求: 当用户点击左侧二级菜单选项的时候,在右侧要显示对应的该二级菜单项下面存在哪些商品,例如点击潮流女装,要在右侧分页显示该潮流女装下对应哪些商品 1.要分页显示 首先要获得该二 ...

  9. SSH网上商城一

    Java高级项目之SSH网上商城项目实战: 1.采用目前最主流的三大框架开发即Struts2+Spring+Hibernate框架整合开发.2.通过AJAX技术提供良好的用户体验.3.提供了邮箱激活的 ...

  10. Excel帮助类

    Excel帮助类操作 public class ExcelHelper { /// <summary> /// 将xls导入List /// </summary> /// &l ...