数据可视化基础专题(八):Pandas基础(七) 数据清洗与预处理相关
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)
设置inplace为True可以让我们的改变直接反映在对象上。让我们看看是否正确:
>>> 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中的重复行,有两种方法可以提供帮助:duplicated和drop_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基础(七) 数据清洗与预处理相关的更多相关文章
- 数据可视化实例(八): 边缘直方图(matplotlib,pandas)
https://datawhalechina.github.io/pms50/#/chapter6/chapter6 边缘直方图 (Marginal Histogram) 边缘直方图具有沿 X 和 Y ...
- web 部署专题(八):Nginx 反向代理中cookie相关问题
问题3:认证问题 Domino服务器中,通过写了一些接口代码,提供RESTful的服务,来对手机端进行提供服务.但是由于原来的环境,没有SSO,而且不通过认证,没法访问到Domino里面的接口代码. ...
- 前端er必须掌握的数据可视化技术
又是一月结束,打工人准时准点的汇报工作如期和大家见面啦.提到汇报,必不可少的一部分就是数据的汇总.分析. 作为一名合格的社会人,我们每天都在工作.生活.学习中和数字打交道.小到量化的工作内容,大到具体 ...
- Python数据可视化基础讲解
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:爱数据学习社 首先,要知道我们用哪些库来画图? matplotlib ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
- 数据可视化(7)--D3基础
一直想写写D3,觉得D3真心比较强大,基本上你能想出来的图表都能绘制出来,只不过使用起来比前几个要稍麻烦一点. 正好最近读完了<数据可视化实战>,将关于D3的知识梳理了一遍,写这篇博客记录 ...
- python 爬虫与数据可视化--python基础知识
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
- 科学计算三维可视化---Mlab基础(数据可视化)
推文:科学计算三维可视化---TVTK库可视化实例 使用相关函数:科学计算三维可视化---Mlab基础(管线控制函数) 一:mlab.pipeline中标量数据可视化 通过持续实例,来感受mlab对数 ...
- 数据可视化-svg入门基础(二)
接上一篇:数据可视化-svg入门基础(一),基础一主要是介绍了svg概念,元素样式设置等. svg是(scalable vector graphic)伸缩矢量图像. 一.目录 (1)图形元素 (2)文 ...
随机推荐
- laravel clone后需要做的操作
首先 安装依赖关系 composer install 第二步 复制配置文件 cp .env.example .env 第三步 创建新的应用程序密钥 php artisan key:generate 第 ...
- Hive和HBase整合用户指南
本文讲解的Hive和HBase整合意思是使用Hive读取Hbase中的数据.我们可以使用HQL语句在HBase表上进行查询.插入操作:甚至是进行Join和Union等复杂查询.此功能是从Hive 0. ...
- Android学习笔记菜单资源文件
创建菜单资源 menu_one.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns: ...
- VB.NET在基类中定义共享事件(类似于C#中的静态事件)
基类: Public Class userFun Private Shared _PnlStatus As String ‘必须设为共享字段,如果不设为Shared,将不能传递字符串内容 Public ...
- SpringCloud教程第1篇:Eureka(F版本)
一.创建服务注册中心(Eureka组件) 1.1 首先创建一个maven主工程. 1.创建maven项目 是一个主Maven工程,spring Boot版本为2.0.3.RELEASE,Spring ...
- 5、struct2的支持ModelDriver获得参数
1.在以前的代码中我们我们需要获得jsp传递过来的参数我们采用下面的方式获得 package com.weiyuan.test; /** * struct2的action可以不继承任何框架的接口 * ...
- 关于idea的一些快捷键
最近在用idea写代码,熟悉一些快捷键的使用能够让写代码的速度提高,以下快捷键是默认idea的快捷键,当然我们可以自己修改的: 自动补全代码快捷键:CTRL+alt+V 自动格式化代码:CTRL+al ...
- NPM 配置文件修改
NPM 配置文件修改 几乎每一门语言都有配套的包管理器,比如 Ruby 有 RubyGems,Go 有 go modules,npm 作为 node 的包管理器,你有想过全局安装的 node 包都放在 ...
- 入门大数据---SparkSQL外部数据源
一.简介 1.1 多数据源支持 Spark 支持以下六个核心数据源,同时 Spark 社区还提供了多达上百种数据源的读取方式,能够满足绝大部分使用场景. CSV JSON Parquet ORC JD ...
- JavaScript基础对象创建模式之命名空间(Namespace)模式(022)
JavaScript中的创建对象的基本方法有字面声明(Object Literal)和构造函数两种,但JavaScript并没有特别的语法来表示如命名空间.模块.包.私有属性.静态属性等等面向对象程序 ...