Pandas数据分析,你不能不知道的技能

简介: Pandas数据分析,你不能不知道的技能

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

一、前言

本文来自四位读者的合作,这四位读者是之前推文14个pandas神操作,手把手教你写代码中赠书活动的中奖者,奖品是赠书《深入浅出Pandas:利用Python进行数据处理与分析》。

这里赠书有要求:获赠读者需要先说一下自己对对应最爱pandas操作函数的理解+一个对应函数应用小案例,于是也就有了今天这篇文章。

后面赠书也会更多这样,一来确保图书赠送出去是给到了确实有需要、是想学习的读者,再者获赠读者的分享也可以给其他未获得赠书的读者学习,也可以给公众号推文积累素材。

废话不多说,开始今天的学习吧,三个pandas中经典中经典的函数使用分享,欢迎大家点赞、转发本文,支持作者,公众号简说Python技术文章,只要点赞破百,老表就会在视频号开直播带带大家一起进行项目复现。

二、本文概要

  • pandas merge by 修罗闪空
  • pandas apply by pluto、乔瞧
  • pandas pivot_table by 石墨锡

三、pandas merge by 修罗闪空

3.1 merge函数用途

pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操作,得到一个新的数据集。

3.2 merge函数的具体参数

  • 用法:
DataFrame1.merge(DataFrame2, 
how=‘inner’, on=None, left_on=None, 
right_on=None, left_index=False, 
right_index=False, sort=False, suffixes=(‘_x’, ‘_y’))
  • 参数说明:

  • how:默认为inner,可设为inner/outer/left/right;

  • on:根据某个字段进行连接,必须存在于两个DateFrame中(若未同时存在,则需要分别使用left_on和right_on来设置);

  • left_on:左连接,以DataFrame1中用作连接键的列;

  • right_on:右连接,以DataFrame2中用作连接键的列;

  • left_index:将DataFrame1行索引用作连接键;

  • right_index:将DataFrame2行索引用作连接键;

  • sort:根据连接键对合并后的数据进行排列,默认为True;

  • suffixes:对两个数据集中出现的重复列,新数据集中加上后缀_x,_y进行区别。

3.3 merge函数的应用

3.3.1 merge一般应用

import pandas as pd
# 定义资料集并打印出来
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                     'key2': ['K0', 'K1', 'K0', 'K1'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                      'key2': ['K0', 'K0', 'K0', 'K0'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})
print(left)
print('------------')
print(right)

image.png

  • 单个字段连接
# 依据key1 column合并,并打印
res = pd.merge(left, right, on='key1')
print(res)
  • 多字段连接
# 依据key1和key2 column进行合并,并打印出四种结果['left', 'right','outer', 'inner']
res = pd.merge(left, right, on=['key1', 'key2'], how='inner')
print(res)
res = pd.merge(left, right, on=['key1', 'key2'], how='outer')
print(res)
res = pd.merge(left, right, on=['key1', 'key2'], how='left') # 以left为主进行合并
print(res)
res = pd.merge(left, right, on=['key1', 'key2'], how='right') # 以right为主进行合并
print(res)

3.3.2 merge进阶应用

  • indicator 设置合并列数据来源
# indicator 设置合并列数据来源
df1 = pd.DataFrame({'coll': [0, 1], 'col_left': ['a', 'b']})
df2 = pd.DataFrame({'coll': [1, 2, 2], 'col_right': [2, 2, 2]})
print(df1)
print('---------')
print(df2)
# 依据coll进行合并,并启用indicator=True,最后打印
res = pd.merge(df1, df2, on='coll', how='outer', indicator=True)
print(res)
'''
left_only 表示数据来自左表
right_only 表示数据来自右表
both 表示两个表中都有,也就是匹配上的
'''

image.png

# 自定义indicator column的名称并打印出
res = pd.merge(df1, df2, on='coll', how='outer', indicator='indicator_column')
print(res)
  • 依据index合并
# 依据index合并
# 定义数据集并打印出
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                     'B': ['B0', 'B1', 'B2']},
                   index = ['K0', 'K1', 'K2'])
right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
                     'D': ['D0', 'D2', 'D3']},
                   index = ['K0', 'K2', 'K3'])
print(left)
print('---------')
print(right)

image.png

# 依据左右数据集的index进行合并,how='outer',并打印
res = pd.merge(left, right, left_index=True, right_index=True, how='outer')
print(res)
# 依据左右数据集的index进行合并,how='inner',并打印
res = pd.merge(left, right, left_index=True, right_index=True, how='inner')
print(res)
  • 解决overlapping的问题
# 解决overlapping的问题
# 定义资料集
boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})
girls = pd.DataFrame({'k': ['K0', 'K1', 'K3'], 'age': [4, 5, 6]})
print(boys)
print('---------')
print(girls)
# 使用suffixes解决overlapping的问题
# 比如将上面两个合并时,age重复了,则可通过suffixes设置,以此保证不重复,不同名(默认会在重名列名后加_x _y)
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')
print(res)

image.png

四、pandas apply by pluto、乔瞧

4.1 pandas apply by pluto

apply函数是pandas中极其好用的一个函数,它可以对dataframe在行或列方向上进行批量化处理,从而大大简化数据处理的过程。

apply函数的基本形式:

DataFrame.apply(func, 
axis=0, broadcast=False, 
raw=False, reduce=None, args=(), **kwds)

我们最常用前两个参数,分别是func运算函数和axis运算的轴,运算轴默认是axis=0,按列作为序列传入func运算函数,设置axis=1则表示按行进行计算。

在运算函数并不复杂的情况下,第一个参数通常使用lambda函数。当函数复杂时可以另外写一个函数来调用。下面通过一个实例来说明:

import pandas as pd
df = pd.DataFrame({'A':[3,1,4,1,5,9,None,6],
              'B':[1,2,3,None,5,6,7,8]})
d = df.apply(lambda x: x.fillna(x.mean()))
print(df)
print('----------')
print(d)

处理前的数据:

image.png

处理后的数据:

image.png

可以看到上面代码通过apply对nan值进行了均值填充,填充的为nan值所在列的均值。

在默认情况下,axis参数值为0,表示在行方向上进行特定的函数运算,即对每一列进行运算。

我们可以设置axis=1来对每一行进行运算。例如我将上例设置为axis=1,结果变为:

image.png

可以看出它是使用每行的均值对nan值进行了填充。

apply也可以另写函数来调用:

import pandas as pd
df = pd.DataFrame({'A':[3,1,4,1,5,9,None,6],
              'B':[1,2,3,None,5,6,7,8]})
def add(x):
    return x+1
d = df.apply(add, axis=1)
print(df)
print('----------')
print(d)

这个函数实现了对每一列上的数字加一:

image.png

注意:行方向,不是指对行进行运算。

比如:一行有[a, b, c, d],行方向运算指的是按先计算a列,然后计算b列,再计算c列,最后计算d列,所以行方向指的只是运算顺序的方向。

(不用过度纠结,记住axis=0是对列进行计算,axis=1是对行进行计算即可)

4.2 pandas apply by 乔瞧

首先还是要感谢【老表Max】推送的视频及文档,都比较精华,为初学者指明了方向。

今天是学习pandas的第四天,最深感触是其在处理EXCEL数据方面可为鬼斧神工,无论增、删、查、分都高效快捷,本以为Pandas做到这种程度已经相当棒了,但是当学到apply函数时,才发觉它超出了自己的想象力。

Apply简单案例如下:

唐僧师徒加上白龙马一行五人去参加成人考试,考试科目包含语文、数学、英语共三门,现在想要知道三门科目成绩均不小于85分的人有哪些?

import pandas as pd
df = pd.DataFrame({'语文':[93,80,85,76,58],
                   '数学':[87,99,95,85,70],
                   '英语':[80,85,97,65,88]}, 
                  index=['孙悟空','猪八戒','沙和尚','唐僧','白龙马']
                 )
print(df)
print('-----------')
df1 = df.loc[df['语文'].apply(lambda x:85<=x<100)] \
    .loc[df['英语'].apply(lambda x:85<=x<100)] \
    .loc[df['数学'].apply(lambda x:85<=x<100)]
print(df1)

image.png

pandas pivot_table by 石墨锡

在pandas中 除了pivot_table  还有pivot函数也一样可以实现数据透视功能,前者可以看成后者的增强版。

pivot_table函数的基本形式:

DataFrame.pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

pivot_tabel对数据格式要求不高,而且支持aggfunc/fillvalue等参数,所以应用更加广泛。

pivot_table函数的参数有values(单元格值)、index(索引)、columns(列名),这些参数组成一个数据透视表的基本结构。

复杂一点 要用到aggfunc方法,默认是求均值(针对于数值列),当然也可以求其他统计量或者得到数据类型的转换,而且可以多个统计方法同时使用。

总而言之,pivot_table可以转换各个维度去观察数据,达到“透视”的目的。

案例说明:

import numpy as np
import pandas as pd
df = pd.DataFrame({'brand': ['苹果', '三星', '华为', 'OPPO', '诺基亚', '小米'],
                    'country': ['美国','韩国','中国','中国','美国','中国'],
                   'system': ['OS', 'Android', 'Harmony', 'Android', 'Android', 'Android'],
                   'score': [94.7,  92.8, 96.8, 89.3, 88.4, 91.2]})
df

image.png

# 按country进行分组,默认计算数值列的均值
df.pivot_table(index='country')

image.png

# 按country进行分组,除了计算score均值,另外计算每个国家出现的品牌个数(不重复)
df.pivot_table(index='country',aggfunc={'score':np.mean,'brand':lambda x : len(x.unique())})

image.png

# 按country进行分组,system作为列名,score作为表中的值(重复的取均值),取对应的数据生成新的表
df.pivot_table(index='country',columns='system',values='score')

image.png

# 统计各个国家手机的最高分 最低分  平均分,空值填充为零
df.pivot_table(index='country',columns='system',values='score',aggfunc=[max,min,np.mean],fill_value=0)

image.png

最后,再次给大家安利下《深入浅出Pandas:利用Python进行数据处理与分析》,将pandas相关知识讲的特别齐全、详细,最后一章节还要大量的实践项目和案例,我在编辑本文时,对于读者分享内容中不确定的部分,也有查看图书说明,深感这本图书对于pandas使用者的好处。

今天就到这里啦,欢迎大家在评论区留言说说你学习本文的感受或者你想推荐的其他pandas使用技巧,优秀分享将有可能获得赠书或者红包奖励哦~

相关文章
|
19天前
|
数据采集 数据可视化 数据挖掘
多维数据分析:使用Pandas进行复杂的数据操作和聚合
【4月更文挑战第12天】Pandas是Python的强大数据分析库,提供DataFrame数据结构进行多维数据处理。本文介绍了使用Pandas进行多维数据分析的流程:1) 导入数据(如CSV、Excel);2) 数据预处理,包括缺失值处理和类型转换;3) 数据探索,利用describe()、hist()、plot()等进行统计和可视化;4) 数据操作,如筛选、排序和分组;5) 数据聚合,通过groupby()和agg()进行计算。文中还给出了电商数据分析的案例,展示Pandas在实际应用中的价值。
|
2月前
|
数据挖掘 C语言 索引
数据分析-pandas(三)
在这里,我们将讨论pandas数据结构中常见的许多基本功能
20 0
|
2月前
|
数据挖掘 索引 Python
数据分析-pandas(一)
pandas是Python的一个第三方开源库,是Python数据分析的必备高级工具,Pandas 这个名字来源于面板数据(Panel Data)与数据分析(data analysis)这两个名词的组合。在经济学中,Panel Data 是一个关于多维数据集的术语。Pandas 最初被应用于金融量化交易领域,现在它的应用领域更加广泛,涵盖了农业、工业、交通等许多行业。
37 0
|
2月前
|
SQL 数据挖掘 数据处理
Python数据分析(二)—— Pandas快速入门
Python数据分析(二)—— Pandas快速入门
|
1天前
|
数据可视化 数据挖掘 C++
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
|
2天前
|
算法 数据挖掘 数据处理
数据分析Pandas之Series,快速上手
数据分析Pandas之Series,快速上手
|
13天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
15 1
|
14天前
|
供应链 搜索推荐 数据挖掘
Pandas实战案例:电商数据分析的实践与挑战
【4月更文挑战第16天】本文通过一个电商数据分析案例展示了Pandas在处理销售数据、用户行为分析及商品销售趋势预测中的应用。在数据准备与清洗阶段,Pandas用于处理缺失值、重复值。接着,通过用户购买行为和商品销售趋势分析,构建用户画像并预测销售趋势。实践中遇到的大数据量和数据多样性挑战,通过分布式计算和数据标准化解决。未来将继续深入研究Pandas与其他先进技术的结合,提升决策支持能力。
|
14天前
|
存储 数据可视化 数据挖掘
实战案例:Pandas在金融数据分析中的应用
【4月更文挑战第16天】本文通过实例展示了Pandas在金融数据分析中的应用。案例中,一家投资机构使用Pandas加载、清洗股票历史价格数据,删除无关列并重命名,将日期设为索引。接着,数据被可视化以观察价格走势,进行基本统计分析了解价格分布,以及计算移动平均线来平滑波动。Pandas的便捷功能在金融数据分析中体现出高效率和实用性。
|
15天前
|
存储 数据可视化 数据挖掘
数据分析与可视化:Pandas与Matplotlib/Seaborn的完美结合
【4月更文挑战第16天】本文探讨了Python中的Pandas、Matplotlib和Seaborn如何协同进行数据分析与可视化。Pandas提供高效的数据结构DataFrame,便于数据处理和清洗;Matplotlib是基础绘图库,支持自定义图表;Seaborn则在Matplotlib基础上提供美观的统计图形。通过这三个库的无缝结合,数据分析师可以从数据处理直达可视化,提高效率并呈现更具吸引力的分析结果。掌握这些工具将助力深入理解数据并揭示其中的故事。