上篇分享了数据分析用到的一个库:Numpy 库,今天分享一个比 Numpy 更高效的库:pandas,它可以对数据进行导入、清洗、处理、统计和输出。pandas 是基于 Numpy 库的,可以说,pandas 库就是为数据分析而生的。

环境

语言:Python 3.6

安装&导入

用 pip 命令快速安装 pandas 库。

Python

pip install pandas

1

pip install pandas

安装完后再编辑器中导入。

Python

import pandas as pd

1

import pandas as pd

读取文件

读取你的 excel 文件,并另存为 csv 格式的文件。

Python

import pandas as pd

from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('test.xlsx'))

df.to_csv('test1.csv')

print(df)

1

2

3

4

5

6

importpandasaspd

frompandasimportDataFrame,Series

df=DataFrame(pd.read_excel('test.xlsx'))

df.to_csv('test1.csv')

print(df)

读取过程中可能会报错,提示你缺少 xlrd 模块的情况,用 pip 命令安装即可。

打印出读取到的数据,我们发现,文件中单元格为空的数据以 NAN 代替了。

当然,也可以直接读取文件并打印,不给参数的话默认只打印前 5 行数据。以我之前爬取的热门歌手文件为例。

Python

import pandas as pd

from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))

print(df.head(8))

1

2

3

4

5

importpandasaspd

frompandasimportDataFrame,Series

df=DataFrame(pd.read_excel('歌手.xlsx'))

print(df.head(8))

打印结果如下:

Python

歌手名字 歌手ID

0 周杰伦 6452

1 陈奕迅 2116

2 薛之谦 5781

3 林俊杰 3684

4 李荣浩 4292

5 张学友 6460

6 杨宗纬 6066

7 许巍 5770

1

2

3

4

5

6

7

8

9

歌手名字歌手ID

0周杰伦6452

1陈奕迅2116

2薛之谦5781

3林俊杰3684

4李荣浩4292

5张学友6460

6杨宗纬6066

7许巍5770

清洗数据

我们知道,从事数据分析工作的,80% 的时间都花在数据清洗上面,因为我们从各个渠道获取的信息格式不统一,我们需要对他们进行清洗。

清洗数据主要内容如下:

删除 DataFrame 中的不必要列和行。

重命名 columns 为一组更易识别的标签。

更改数据格式。

去除数据间空格或者特定字符。

去除重复的行。

查找空值。

删除行或者列

我们还是以刚才歌手信息为例,为了看删除效果,我加了一列信息:性别,下面只显示部分信息。

Python

歌手名字 歌手ID 性别

0 周杰伦 6452 男

1 陈奕迅 2116 男

2 薛之谦 5781 男

3 林俊杰 3684 男

4 李荣浩 4292 男

5 张学友 6460 男

6 杨宗纬 6066 男

7 许巍 5770 男

1

2

3

4

5

6

7

8

9

歌手名字歌手ID性别

0周杰伦6452男

1陈奕迅2116男

2薛之谦5781男

3林俊杰3684男

4李荣浩4292男

5张学友6460男

6杨宗纬6066男

7许巍5770男

删除性别这一列。

Python

import pandas as pd

from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))

df1 = df.drop(columns=['性别'])

print(df1)

1

2

3

4

5

6

importpandasaspd

frompandasimportDataFrame,Series

df=DataFrame(pd.read_excel('歌手.xlsx'))

df1=df.drop(columns=['性别'])

print(df1)

执行后发现刚加的「性别」这一列已被删除。

删除某一行,比如删除李荣浩这一行信息,我们通过上面可以知道这一行的 index 是 4。

Python

import pandas as pd

from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))

df1 = df.drop(index=['李荣浩'])

print(df1)

1

2

3

4

5

6

importpandasaspd

frompandasimportDataFrame,Series

df=DataFrame(pd.read_excel('歌手.xlsx'))

df1=df.drop(index=['李荣浩'])

print(df1)

执行后结果如下,我们发现,index 为 4 的这一行信息已被删除。

Python

歌手名字 歌手ID 性别

0 周杰伦 6452 男

1 陈奕迅 2116 男

2 薛之谦 5781 男

3 林俊杰 3684 男

5 张学友 6460 男

6 杨宗纬 6066 男

7 许巍 5770 男

1

2

3

4

5

6

7

8

歌手名字歌手ID性别

0周杰伦6452男

1陈奕迅2116男

2薛之谦5781男

3林俊杰3684男

5张学友6460男

6杨宗纬6066男

7许巍5770男

重命名列名

用 rename 方法将列名修改成自己需要的列名,比如歌手名字换成 SName。

Python

import pandas as pd

from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))

df.rename(columns={'歌手名字': 'SName'}, inplace=True)

print(df)

1

2

3

4

5

6

importpandasaspd

frompandasimportDataFrame,Series

df=DataFrame(pd.read_excel('歌手.xlsx'))

df.rename(columns={'歌手名字':'SName'},inplace=True)

print(df)

更改数据格式

用 astype 更改数据格式。

Python

df = DataFrame(pd.read_excel('歌手.xlsx'))

df1 = df['歌手ID'].astype('str')

1

2

df=DataFrame(pd.read_excel('歌手.xlsx'))

df1=df['歌手ID'].astype('str')

删除数据间空格

Python

df = DataFrame(pd.read_excel('歌手.xlsx'))

df['歌手名字'] = df['歌手名字'].map(str.strip) # 删除左右两边空格

df['歌手名字'] = df['歌手名字'].map(str.lstrip) # 删除左边空格

df['歌手名字'] = df['歌手名字'].map(str.rstrip) # 删除右边空格

1

2

3

4

df=DataFrame(pd.read_excel('歌手.xlsx'))

df['歌手名字']=df['歌手名字'].map(str.strip)# 删除左右两边空格

df['歌手名字']=df['歌手名字'].map(str.lstrip)# 删除左边空格

df['歌手名字']=df['歌手名字'].map(str.rstrip)# 删除右边空格

去除重复的行

用自带的方法一行代码可以搞定。

Python

df = DataFrame(pd.read_excel('歌手.xlsx'))

df = df.drop_duplicates()

1

2

df=DataFrame(pd.read_excel('歌手.xlsx'))

df=df.drop_duplicates()

查找空值

我们可以用 isnull 方法查找数据中的空值或者 NAN,返回的是 Boolean 类型,False 表示不是空值,True 表示空值。

Python

df = DataFrame(pd.read_excel('歌手.xlsx'))

df = df.isnull()

print(df)

1

2

3

df=DataFrame(pd.read_excel('歌手.xlsx'))

df=df.isnull()

print(df)

为了展示效果,我执行前去掉了第 5 行的信息,所以第 5 行出现一个 True。

Python

歌手名字 歌手ID

0 False False

1 False False

2 False False

3 False False

4 True False

1

2

3

4

5

6

歌手名字歌手ID

0FalseFalse

1FalseFalse

2FalseFalse

3FalseFalse

4TrueFalse

数据统计

上周讲 Numpy 库时也讲到了对数据的统计,计算数据最大值、最小值、平均值、方差、标准差等。pandas 也可以做这些工作,而且 pandas 中的 describe 可以直接显示这个数据。

我们先创建一个科目成绩的数据。

Python

df = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})

print(df)

1

2

df=DataFrame({'subject':['语','数','外','理','化'],'data':range(90,95)})

print(df)

数据如下:

Python

subject data

0 语 90

1 数 91

2 外 92

3 理 93

4 化 94

1

2

3

4

5

6

subjectdata

0语90

1数91

2外92

3理93

4化94

我们用 describe 方法直接显示这些统计数据。

Python

df = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})

print(df.describe())

1

2

df=DataFrame({'subject':['语','数','外','理','化'],'data':range(90,95)})

print(df.describe())

结果如下:

Python

data

count 5.000000

mean 92.000000

std 1.581139

min 90.000000

25% 91.000000

50% 92.000000

75% 93.000000

max 94.000000

1

2

3

4

5

6

7

8

9

data

count5.000000

mean92.000000

std1.581139

min90.000000

25%91.000000

50%92.000000

75%93.000000

max94.000000

多表合并

如果我们有多个数据表,我们需要对他进行合并处理。以下这些知识点和 SQL 很相似,如果你对 SQL 语句熟悉的话,以下很容易理解

对相同的列进行合并

Python

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})

df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})

df3 = pd.merge(df1, df2, on='subject')

print(df3)

1

2

3

4

df1=DataFrame({'subject':['语','数','外','理','化'],'data':range(90,95)})

df2=DataFrame({'subject':['语','数','外','史','地'],'data':range(90,95)})

df3=pd.merge(df1,df2,on='subject')

print(df3)

两个表中,语数外是相同的,进行合并,结果如下:

Python

subject data_x data_y

0 语 90 90

1 数 91 91

2 外 92 92

1

2

3

4

subjectdata_xdata_y

0语9090

1数9191

2外9292

内连接

也就是两个数据表中的交集部分。

Python

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})

df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})

df3 = pd.merge(df1, df2, how='inner')

print(df3)

1

2

3

4

df1=DataFrame({'subject':['语','数','外','理','化'],'data':range(90,95)})

df2=DataFrame({'subject':['语','数','外','史','地'],'data':range(90,95)})

df3=pd.merge(df1,df2,how='inner')

print(df3)

结果显示两个表中相同的数据。

Python

subject data

0 语 90

1 数 91

2 外 92

1

2

3

4

subjectdata

0语90

1数91

2外92

左连接

以左表为主,右表只显示交集部分的数据。

Python

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})

df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})

df3 = pd.merge(df1, df2, how='left')

print(df3)

1

2

3

4

df1=DataFrame({'subject':['语','数','外','理','化'],'data':range(90,95)})

df2=DataFrame({'subject':['语','数','外','史','地'],'data':range(90,95)})

df3=pd.merge(df1,df2,how='left')

print(df3)

执行结果:

Python

subject data

0 语 90

1 数 91

2 外 92

3 理 93

4 化 94

1

2

3

4

5

6

subjectdata

0语90

1数91

2外92

3理93

4化94

右连接

以右表为主,左表只显示交集部分的数据。

Python

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})

df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})

df3 = pd.merge(df1, df2, how='right')

print(df3)

1

2

3

4

df1=DataFrame({'subject':['语','数','外','理','化'],'data':range(90,95)})

df2=DataFrame({'subject':['语','数','外','史','地'],'data':range(90,95)})

df3=pd.merge(df1,df2,how='right')

print(df3)

执行结果:

Python

subject data

0 语 90

1 数 91

2 外 92

3 史 93

4 地 94

1

2

3

4

5

6

subjectdata

0语90

1数91

2外92

3史93

4地94

全连接

显示两个表数据的并集。

Python

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})

df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})

df3 = pd.merge(df1, df2, how='outer')

print(df3)

1

2

3

4

df1=DataFrame({'subject':['语','数','外','理','化'],'data':range(90,95)})

df2=DataFrame({'subject':['语','数','外','史','地'],'data':range(90,95)})

df3=pd.merge(df1,df2,how='outer')

print(df3)

执行结果:

Python

subject data

0 语 90

1 数 91

2 外 92

3 理 93

4 化 94

5 史 93

6 地 94

1

2

3

4

5

6

7

8

subjectdata

0语90

1数91

2外92

3理93

4化94

5史93

6地94

pandas 库的对于数据分析的基本用法就介绍到这里。

python中的pandas库_数据分析中 pandas 库的基本用法详解相关推荐

  1. python中 for i in range(10)_Python for i in range ()用法详解

    for i in range ()作用: range()是一个函数, for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i r ...

  2. linux中的su-命令的功能,linux su命令参数及用法详解(linux切换用户命令)

    linux su命令参数及用法详解(linux切换用户命令) 发布时间:2012-07-21 12:12:39   作者:佚名   我要评论 su的作用是变更为其它使用者的身份,超级用户除外,需要键入 ...

  3. 【Scripts系列】之Makefile中条件分支ifeq/else/endif/else ifeq/ifneq/ifdef/ifndef用法详解

    DATE: 2019-2-22 前言       条件分支的用法在任何编程语言和脚本以及逻辑中都广泛使用.前文讲述过C语言中预处理的条件编译#ifdef/#if/#elif/#else/#endif用 ...

  4. linux中whoami命令的作用是,linux whoami命令参数及用法详解(linux查看登陆用户名)

    linux whoami命令参数及用法详解(linux查看登陆用户名) 2019年05月31日 | 萬仟网科技 | 我要评论 whoami 命令显示登录名.与使用命令 who 并指定 am i 不同, ...

  5. java string()函数_转载java String.split()函数的用法详解

    转载java String.split()函数的用法详解 如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!在java.lang包中有String.split()方法的原型是: p ...

  6. 汇编语言典型例子详解_数据分析常用的7大思维方法详解

    今天老李继续给大家讲解数据分析经典的思维模型,上篇为大家介绍了目标思维.假设思维.溯源思维.逆向思维4个思维:数据分析必备7大经典模型详解!建议收藏!(上) 今天继续给大家介绍结构思维.演绎推理思维. ...

  7. pivot sqlserver 条件_行转列之SQLSERVERPIVOT与用法详解

    在数据库操作中,有些时候我们遇到需要实现"行转列"的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIM ...

  8. python中map()和dict()怎么用?你知道吗?-用法详解

    map()用法 map()是python的内置函数,会根据提供的函数对指定序列做映射. 语法: map(func, iter, ...) 其中func为一个功能函数,iter表示可迭代参数序列.map ...

  9. mysql中时间处理函数_基于mysql时间处理函数的应用详解

    DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, --7=星期六).这些索引值对应于ODBC标准. mysql> select DAYOFWEEK('1998 ...

最新文章

  1. 线性模型的最小二乘法拟合(转)
  2. 面试之作用域链与闭包
  3. C++ 对象内存布局 (4)
  4. 分酒问题matlab代码,matlab葡萄酒分类数据归一化问题
  5. python使用json实现树结构_js怎样将获取json转换为树形结构
  6. Gentoo Linux 内核指南
  7. Java集成建行龙支付接口(详细)
  8. 《C#语言和数据库技术基础》单词必备
  9. 把C盘正好分成100G的数值
  10. 吴恩达机器学习中文版课后题(中文题目+数据集+python版答案)week1 线性回归
  11. 关于mysql中无法显示中文的完美解决方案
  12. 美国国防高级研究计划局(DARPA)组织管理运行机制分析
  13. 【实时渲染】RTR4 简要问答版
  14. iPhone、iPad、Android UI常用设计尺寸
  15. 二叉树线索化仍不能解决的两个问题及原因
  16. 「轻阅读」京东到家订单中心系统mysql到es的转化之路
  17. 基于stm32的汽车智能充电桩设计/单片机/毕业设计/课程设计
  18. 关于百度和Google的中文搜索
  19. 10.7 剪草 2394
  20. 别名机制alias详解——一个让你少敲键盘的偷懒方式

热门文章

  1. 基于微信小程序平台实现二手物品交易小程序设计【附项目源码】
  2. 聚集索引扫描97%_聚集前1%:R中的资产分析
  3. 渝粤题库 陕西师范大学 《幼儿园管理学》考评作业
  4. 定义抽象类Person、派生类Student和类Teacher
  5. 计算机网络错误是什么意思,电脑网络错误00050是什么意思?
  6. Web网络安全基础入门总笔记
  7. Java源码解析系列(一) Java集合框架
  8. 50k*16 薪,可以跳了!
  9. 【已解决】Ubuntu U盘启动出现“Failed to load ldlinux.c32”问题
  10. 通过梯度下降和牛顿法求解一个数的平方根