Pandas数据框整体操作(中)

简介: 引入俗话说得好,做事和学习要循序渐进。pandas里面数据框整体操作还是非常重要的,上篇主要介绍的是最形象的数据框操作,而本期则偏重综合实践,介绍数据的连接。


引入


俗话说得好,做事和学习要循序渐进。pandas里面数据框整体操作还是非常重要的,上篇主要介绍的是最形象的数据框操作,而本期则偏重综合实践,介绍数据的连接。

希望能顶住压力,看完,相信多多少少会有收获。(我顶住压力写完也是一个挑战hhh)


一、准备工作


我们所用的第三方库和示例数据文件和上期一样。为了避免读者翻阅造成麻烦,这里重新展示导入操作,附带数据介绍,以方便初次阅读该文章的读者能很方便地读下去:


image.png

image.png我们用到的包是pandas和numpy,我们用import方法直接导入,并将其重命名为熟悉的缩写。

image.png


数据我们选用的是某电商平台一定时期的用户行为数据,数据来源为该企业官方数据公开网。


数据说明


user列和brand列分别代表用户和品牌编号,不同用户不同品牌不重复,behavr列中0代表浏览,1代表购买,2代表收藏,3代表加入购物车,date列代表行为日期。


二、数据的连接意义


我们之前讲解的数据框基本操作是“合并”。表格的合并通常是基于列合并,即将一个数据框的每行记录并到另一个数据框最后一行下面。(当然也可以设置基于行合并,添加axis=1参数即可)。

此时合并可以说基于的是同一种意义的数据。以基于列合并为例,比如我们这里的数据文件中有"brand"和“user”等数据的意义,分别代表品牌和用户。合并的时候另一个表的品牌和用户数据会并到前一个表的“brand”“user”列表下(若有不共有的列则空余位置用nan填充),相当于一种数据的 “新增” ——因为我们增加了brand和user的长度。

这一串相当于复习了,有需要例子的可以移步上期。

而实际合并操作中我们更多需要的不是“新增”式合并而是“整理”式合并。

比如我有一串用户数据,记录了用户id和购买的商品的id,还有一串商家数据,记录了商家id和售出商品的id。

现在我想开发一个智能推荐算法,需要看看用户一般买哪些商家的产品,好做后期推送。

那我该如何把这两个表连在一起呢?他们合并的依据不再是列名或者行的索引,而是数据中实实在在的数据值。

merge函数很好地解决了这个问题:


三、merge妙用一:一对一数据合并


首先我们创造两个示例数据框:

a2=pd.DataFrame([["001","104"],["002","101"],["003","103"],["004","102"]],columns=["user","items"])
#用户购买了商品
b2=pd.DataFrame([["s01","101"],["s02","103"],["s03","102"],["s04","104"]],columns=["seller","items"])
#商品属于商家

此处我们直接用DataFrame函数,嵌套二级表格创建。运行结果如下:

image.png

merge函数使用非常简单,传入两个dataframe参数即可:

pd.merge(a2,b2)

运行一下:

image.png

可以看出此时两个表已经通过items中的各个商品编号连接在了一起


四、merge妙用二:一对多数据合并


有的时候一个用户不止买了一个产品,两个数据表的数据量不对等,这个情况怎么办?

智能的merge函数会自动复制重复的内容。

举个例子,我们再制作一个一个用户买多个产品的数据框

a3=pd.DataFrame([["001","104"],["002","101"],["003","103"],["003","102"],["004","102"]],columns=["user","items"])
#假设某个用户购买了多个商品


image.png

image.png

此时我们继续使用merge函数连接a3和b2,依然能得到想要的结果:

image.png

五、数据不完全对等


这时候有朋友会问:那要是有互不相容的数据呢?

比如用户买了东西的记录有,而商家卖出的记录因丢失、存在别的表里等其他原因不在我想连接的表里。这个时候merge怎么处理这些情况?

答案是,默认会舍弃不一致的数据

b4=pd.DataFrame([["s01","101"],["s02","103"],["s05","105"],["s04","104"]],columns=["seller","items"])
#制作一个不一致数据的数据表

将这个数据表与a2连接,

image.png

我们发现数据直接被舍弃了。

tip:如果不希望舍弃的话,可以尝试设置how参数来自定义丢弃——都丢弃,还是保留一边(我们这里以保留左边为例)

image.png

参数的设置比较简单,见图即可


六、列标自定义


进行到这里,大家应该不难发现最后缺少的一步是什么了:

既然我们用merge函数是针对列中数据值的连接,那我们要合并的列名称本身应该可以自由选择指定才比较友好。


何出此言?

试想一下,其实针对一家企业来说,我们上面假设的“用户-商品”和“商品-商家”表格需要连接的情况并不常见

——因为在数据库内部本身就应该含有“用户-商品-商家”这样统一的数据。导出的时候不大会分开导出成两个表。

真的需要我们连接的,往往是企业与企业共享数据、企业并购企业等需要引入新数据的时候。这样两个数据表的接口(也就是我们上面例子中的列名称items)往往不相同,能指定列名进行合并才是正解!

的确,merge中提供了left_onright_on参数来自定义合并的列:

b21=pd.DataFrame([["s01","101"],["s02","103"],["s03","102"],["s04","104"]],columns=["seller","id"])
b21
#创建商品的列标不一致的b21

image.png

接下来我们将其与a2连接,设置left_on right_on参数:

image.png

不难发现,连接是成了。但是两个不同名的列会产生重复。解决很简单,drop函数选择一个丢弃即可——

image.png

本期结语


数据框整体操作是个人感觉比较常用且需要理解的内容。因为你需要知道合并的逻辑——行合并?列合并?基于什么合并?……

到中期为止数据框整体的常用操作基本上已经讲解完毕了,欢迎各位读者纠错、指点。

下期我计划写一篇“矩阵特征值挖掘”相关的讲解,与大家一起看看数据框的合并能带来怎么样的数据分析火花。


相关文章
|
2天前
|
数据格式 Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数转换数据格式。示例代码展示了如何通过`melt()`转为长格式,再用`pivot()`恢复为宽格式。输入数据是包含'Name'和'Age'列的DataFrame,最终结果经过转换后呈现出不同的布局。
44 6
|
2天前
|
JSON 数据挖掘 数据格式
Pandas中Series、DataFrame讲解及操作详解(超详细 附源码)
Pandas中Series、DataFrame讲解及操作详解(超详细 附源码)
122 0
|
5月前
|
前端开发 Python
Python 教程之 Pandas(13)—— series 上的转换操作
Python 教程之 Pandas(13)—— series 上的转换操作
52 0
|
2天前
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
11 2
|
2天前
|
存储 数据库连接 数据处理
数据加载与保存:Pandas中的数据输入输出操作
【4月更文挑战第16天】Pandas是Python数据分析的强大工具,支持多种数据加载和保存方法。本文介绍了如何使用Pandas读写CSV和Excel文件,以及与数据库交互。`read_csv`和`to_csv`用于CSV操作,`read_excel`和`to_excel`处理Excel文件,而`read_sql`和`to_sql`则用于数据库的读写。了解这些基本操作能提升数据处理的效率和灵活性。
|
2天前
|
数据可视化 Python
如何使用Python的Pandas库进行数据分组和聚合操作?
【2月更文挑战第29天】【2月更文挑战第105篇】如何使用Python的Pandas库进行数据分组和聚合操作?
|
2天前
|
机器学习/深度学习 算法 索引
50个超强的Pandas操作 !!
50个超强的Pandas操作 !!
71 1
|
2天前
|
索引 Python
Python 教程之 Pandas(13)—— series 上的转换操作
Python 教程之 Pandas(13)—— series 上的转换操作
57 0
Python 教程之 Pandas(13)—— series 上的转换操作
|
2天前
|
JSON 数据挖掘 数据库
Pandas 高级教程——IO 操作
Pandas 高级教程——IO 操作
173 2
|
7月前
|
存储 机器学习/深度学习 数据挖掘
向量化操作简介和Pandas、Numpy示例
Pandas是一种流行的用于数据操作的Python库,它提供了一种称为“向量化”的强大技术可以有效地将操作应用于整个列或数据系列,从而消除了显式循环的需要。在本文中,我们将探讨什么是向量化,以及它如何简化数据分析任务。
94 0