【Pandas 数据分析 1】快速入门

7 篇文章 0 订阅
7 篇文章 0 订阅

本专栏将详细介绍 Python 常用库 Pandas 的用法

目录

1.1 读取数据

1.2 查看数据

1.3 验证数据

1.4 建立索引

1.5 数据选取

1.6 排序

1.7 分组聚合

1.8 数据转换

1.9 增加列

1.10 统计分析

1.11 绘图

1.12 导出


1.1 读取数据

变量名用df(DataFrame的缩写,后续会介绍),它是Pandas二维数据的基础结构

import pandas as pd # 引入Pandas库,按惯例起别名pd

# 以下两种效果一样,如果是网址,它会自动将数据下载到内存
df = pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')
df = pd.read_excel('team.xlsx') # 文件在notebook文件同一目录下
# 如果是CSV,使用pd.read_csv(),还支持很多类型的数据读取

其中:自动增加了第一列,是Pandas为数据增加的索引,从0开始,程序不知道我们真正的业务索引,往往需要后面重新指定,使它有一定的业务意义;由于数据量大,自动隐藏了中间部分,只显示前后5条;底部显示了行数和列数。

1.2 查看数据

df.head() # 查看前5条,括号里可以写明你想看的条数
df.tail() # 查看尾部5条
df.sample(5) # 随机查看5条

1.3 验证数据

df.shape # (100, 6) 查看行数和列数
df.info() # 查看索引、数据类型和内存信息
df.describe() # 查看数值型列的汇总统计
df.dtypes # 查看各字段类型
df.axes # 显示数据行和列名
df.columns # 列名

df.info()显示有数据类型、索引情况、行列数、各字段数据类型、内存占用等:

df.describe()会计算出各数字字段的总数(count)、平均数(mean)、标准差(std)、最小值(min)、四分位数和最大值(max)

1.4 建立索引

以上数据真正业务意义上的索引是name列,所以我们需要使它成为索引:

df.set_index('name', inplace=True) # 建立索引并生效

其中可选参数inplace=True会将指定好索引的数据再赋值给df使索引生效,否则索引不会生效。注意,这里并没有修改原Excel,从我们读取数据后就已经和它没有关系了,我们处理的是内存中的df变量。

1.5 数据选取

接下来,我们像Excel那样,对数据做一些筛选操作。

(1)选择列:

# 查看指定列
df['Q1']
df.Q1 # 同上,如果列名符合Python变量名要求,可使用

这里返回的是一个Series类型数据,可以理解为数列,它也是带索引的。之前建立的索引在这里发挥出了作用,否则我们的索引是一个数字,无法知道与之对应的是谁的数据。

选择多列的可以用以下方法:

# 选择多列
df[['team', 'Q1']] # 只看这两列,注意括号
df.loc[:, ['team', 'Q1']] # 和上一行效果一样

df.loc[x, y]是一个非常强大的数据选择函数,其中x代表行,y代表列,行和列都支持条件表达式,也支持类似列表那样的切片(如果要用自然索引,需要用df.iloc[])。下面的例子中会进行演示。

(2)选择行:

# 用指定索引选取
df[df.index == 'Liver'] # 指定姓名

# 用自然索引选择,类似列表的切片
df[0:3] # 取前三行
df[0:10:2] # 在前10个中每两个取一个
df.iloc[:10,:] # 前10个

(3)指定行和列

同时给定行和列的显示范围:

df.loc['Ben', 'Q1':'Q4'] # 只看Ben的四个季度成绩
df.loc['Eorge':'Alexander', 'team':'Q4'] # 指定行区间

(4)条件选择

按一定的条件显示数据:

# 单一条件
df[df.Q1 > 90] # Q1列大于90的
df[df.team == 'C'] # team列为'C'的
df[df.index == 'Oscar'] # 指定索引即原数据中的name

# 组合条件
df[(df['Q1'] > 90) & (df['team'] == 'C')] # and关系
df[df['team'] == 'C'].loc[df.Q1>90] # 多重筛选

1.6 排序

df.sort_values(by='Q1') # 按Q1列数据升序排列
df.sort_values(by='Q1', ascending=False) # 降序

df.sort_values(['team', 'Q1'], ascending=[True, False]) # team升序,Q1降序

1.7 分组聚合

可以实现类似SQL的groupby那样的数据透视功能:

df.groupby('team').sum() # 按团队分组对应列相加
df.groupby('team').mean() # 按团队分组对应列求平均
# 不同列不同的计算方法
df.groupby('team').agg({'Q1': sum,  # 总和
                        'Q2': 'count', # 总数
                        'Q3':'mean', # 平均
                        'Q4': max}) # 最大值

1.8 数据转换

对数据表进行转置,不过我们这里仅用sum聚合。

df.groupby('team').sum().T

 也可以试试以下代码,看有什么效果:

df.groupby('team').sum().stack()
df.groupby('team').sum().unstack()

1.9 增加列

用Pandas增加一列非常方便,就与新定义一个字典的键值一样。

df['one'] = 1 # 增加一个固定值的列
df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4 # 增加总成绩列
# 将计算得来的结果赋值给新列
df['total'] = df.loc[:,'Q1':'Q4'].apply(lambda x:sum(x), axis=1)
df['total'] = df.sum(axis=1) # 可以把所有为数字的列相加
df['avg'] = df.total/4 # 增加平均成绩列

1.10 统计分析

df.mean() # 返回所有列的均值
df.mean(1) # 返回所有行的均值,下同
df.corr() # 返回列与列之间的相关系数
df.count() # 返回每一列中的非空值的个数
df.max() # 返回每一列的最大值
df.min() # 返回每一列的最小值
df.median() # 返回每一列的中位数
df.std() # 返回每一列的标准差
df.var() # 方差
s.mode() # 众数

1.11 绘图

Pandas利用plot()调用Matplotlib快速绘制出数据可视化图形。注意,第一次使用plot()时可能需要执行两次才能显示图形。如图1-13所示,可以使用plot()快速绘制折线图。

df['Q1'].plot() # Q1成绩的折线分布

可以先选择要展示的数据,再绘图。

df.loc['Ben','Q1':'Q4'].plot() # ben四个季度的成绩变化

可以使用plot.bar绘制柱状图。

df.loc[ 'Ben','Q1':'Q4'].plot.bar() # 柱状图
df.loc[ 'Ben','Q1':'Q4'].plot.barh() # 横向柱状图

对数据聚合计算后,可以绘制成多条折线图:

# 各Team四个季度总成绩趋势
df.groupby('team').sum().T.plot()

也可以用pie绘制饼图:

# 各组人数对比
df.groupby('team').count().Q1.plot.pie()

1.12 导出

df.to_excel('team-done.xlsx') # 导出 Excel文件
df.to_csv('team-done.csv') # 导出 CSV文件

导出的文件位于notebook文件的同一目录下。

————————————————————————————

查看主页阅读更多内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值