Python进阶:可视化学习Pandas

简介

CSDN编辑时,图片容易缺失,可关注「懒编程」获得更好的阅读体验。

通过可视化的方式来学习Pandas中的简单操作

文中大部分图片出自A Gentle Visual Intro to Data Analysis in Python Using Pandas

Pandas是Python中知名的数据处理工具包,具有强大的功能。

Series与DataFrame

Pandas中与两种基本的数据类型,分布是Series与DataFrame

怎么理解呢?通过下面两张图就可以很好的理解Series与DataFrame之间的关系了

DataFrame中有行与列的概念,如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yz0zmAvm-1582165320572)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822205107.png)]

而Series就相当于DataFrame中的一行或一列

读取数据

通过pandas的read_xxx()方法可以从对应的数据文件中读取数据,如从csv文件中读取数据,使用read_csv(),从Excel文件中读取数据,使用read_excel(),需注意,Pandas读取Excel前需要安装xlrd与xlwt。

以读入csv文件为例

import pandas as pd
df = pandas.read_csv('music.csv')

如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-epmEPgBP-1582165320574)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822204338.png)]

pandas的read_xxx()方法会将数据文件中的数据读取进内存并转为DataFrame

选择数据

DataFrame作为一种类矩阵结构,支持多种筛选数据的方式,这里以下面的DataFrame为例

In [4]: df
Out[4]:
           Artist Genre  Listeners     Plays
0  Billie Holiday  Jazz    1300000  27000000
1    Jimi Hendrix  Rock    2700000  70000000
2     Miles Davis  Jazz    1500000  48000000
3             SIA   Pop    2000000  74000000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8atwlq7W-1582165320575)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822204632.png)]

想要筛选出一列数据,可以直接通过列名去选取,选取出的数据类型为Series

In [5]: df['Artist']
Out[5]:
0    Billie Holiday
1      Jimi Hendrix
2       Miles Davis
3               SIA
Name: Artist, dtype: object

In [6]: type(df['Artist'])
Out[6]: pandas.core.series.Series

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DYkcASeV-1582165320576)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822204706.png)]

想要筛选出多行数据,可以通过切片的方式去筛选

In [7]: df[1:3]
Out[7]:
         Artist Genre  Listeners     Plays
1  Jimi Hendrix  Rock    2700000  70000000
2   Miles Davis  Jazz    1500000  48000000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7GMVwTGh-1582165320585)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822205242.png)]

此外也可以通过loc方法同时使用行号与列标签选择DataFrame中的任意数据片段

In [8]: df.loc[1:3, ['Artist']]
Out[8]:
         Artist
1  Jimi Hendrix
2   Miles Davis
3           SIA

过滤数据

Pandas的Series与DataFrame都可以通过简单的比较运算过滤数据,可以说封装的非常好。

比如过滤出Genre(类型)为Jazz(爵士乐)的数据

In [11]: df[df['Genre'] == 'Jazz']
Out[11]:
           Artist Genre  Listeners       Plays
0  Billie Holiday  Jazz  1,300,000  27,000,000
2     Miles Davis  Jazz  1,500,000  48,000,000

获取过滤出Listeners(听众)超过1800000的数据

In [19]: df[df['Listeners'] > 1800000]
Out[19]:
         Artist Genre  Listeners     Plays
1  Jimi Hendrix  Rock    2700000  70000000
3           SIA   Pop    2000000  74000000

处理缺失数据

当我们对数据进行处理时,经常会遇到数据缺失的情况,如下面的DataFrame中缺失了一个数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n9ofmnS0-1582165320594)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822205814.png)]

Pandas中提供了多种方法,最简单的就是使用dropna()方法将缺失数据所在的位置整行删除。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sN4G6J8f-1582165320595)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822211050.png)]

此外还可以使用 fillna() 方法将的数据填充为0

分组数据

Pandas提供groupby()方法方便我们对数据进行分组处理,groupby()方法要对数据进行分组需要传入的列名,然后以该列数据为基准进行分组。

这就带了一个问题,基准列被分组其实就是对该列中的数据去重,留下不重复的数据作为不同的类别,但这就让行数变少了,那如何处理多出的数据呢?

正是因为这样的原因,直接调用groupby()方法并不能直接获取分组结果,还需要定义如何处理多出数据的逻辑,如采用sum()方法,会将基准列中相同元素对应行的其他列数据进行累加,简单使用如下:

In [20]: df.groupby('Genre').sum()
Out[20]:
       Listeners     Plays
Genre
Jazz     2800000  75000000
Pop      2000000  74000000
Rock     2700000  70000000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZmMwtRtW-1582165320595)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822215414.png)]

除了sum()方法外,还有mean()用于计算平均值、min()获取最小值、max()获取最大值等待。

创建新列

创建新的列对Pandas而言是非常简单的,直接为新列名赋值就好了。

In [21]: df['Avg Plays'] = df['Plays'] / df['Listeners']

In [22]: df
Out[22]:
           Artist Genre  Listeners     Plays  Avg Plays
0  Billie Holiday  Jazz    1300000  27000000  20.769231
1    Jimi Hendrix  Rock    2700000  70000000  25.925926
2     Miles Davis  Jazz    1500000  48000000  32.000000
3             SIA   Pop    2000000  74000000  37.000000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3kN2D8FM-1582165320596)(https://raw.githubusercontent.com/ayuLiao/images/master/20190822215615.png)]

结尾

Pandas的简单使用就介绍完了,更多复杂的使用方式交个后面的文章来介绍吧,记得关注「懒编程」,拜拜。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒编程-二两

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值