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

本期结语


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

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

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


相关文章
|
6月前
|
Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数变换数据。示例代码:导入pandas,定义一个包含'Name'和'Age'列的DataFrame,使用`melt()`转为长格式,再用`pivot()`恢复为宽格式。
146 1
|
6月前
|
数据格式 Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数转换数据格式。示例代码展示了如何通过`melt()`转为长格式,再用`pivot()`恢复为宽格式。输入数据是包含'Name'和'Age'列的DataFrame,最终结果经过转换后呈现出不同的布局。
103 6
|
6月前
|
人工智能 机器人 Serverless
【Python】Pandas的一系列经典操作(非常实用)
【Python】Pandas的一系列经典操作(非常实用)
|
3月前
|
索引 Python
如何在 Pandas 数据框中添加新列?
【8月更文挑战第30天】
380 4
|
3月前
|
索引 Python
如何在 Pandas 中合并数据框?
【8月更文挑战第30天】
47 4
|
3月前
|
存储 关系型数据库 数据库
如何在 Pandas 中合并数据框?
【8月更文挑战第30天】
20 0
|
4月前
|
数据处理 Python
数据科学进阶之路:Pandas与NumPy高级操作详解与实战演练
【7月更文挑战第13天】探索数据科学:Pandas与NumPy提升效率的高级技巧** - Pandas的`query`, `loc`和`groupby`用于复杂筛选和分组聚合,例如筛选2023年销售额超1000的记录并按类别计总销售额。 - NumPy的广播和向量化运算加速大规模数据处理,如快速计算两个大数组的元素级乘积。 - Pandas DataFrame基于NumPy,二者协同加速数据处理,如将DataFrame列转换为NumPy数组进行标准化再回写,避免链式赋值。 掌握这些高级操作,实现数据科学项目的效率飞跃。
63 0
|
6月前
|
索引 Python
使用Python的Pandas库进行数据透视表(pivot table)操作
使用Python Pandas进行数据透视表操作包括:安装Pandas库,导入库,创建或读取数据,如`pd.DataFrame()`或从文件读取;然后使用`pd.pivot_table()`创建透视表,指定数据框、行索引、列索引和值,例如按姓名和科目分组计算平均分;查看结果通过打印数据透视表;最后可使用`to_csv()`等方法保存到文件。这为基础步骤,可按需求调整参数实现更多功能。
296 2
|
6月前
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
66 2
|
6月前
|
数据挖掘 数据处理 索引
Python 应知应会的Pandas高级操作
Python 应知应会的Pandas高级操作
97 0
下一篇
无影云桌面