深入学习Pandas:数据连接、合并、加入、添加、重构函数的全面指南【第72篇—python:数据连接】

news2025/1/23 22:43:49

深入学习Pandas:数据连接、合并、加入、添加、重构函数的全面指南

Pandas是Python中最强大且广泛使用的数据处理库之一,提供了丰富的函数和工具,以便更轻松地处理和分析数据。在本文中,我们将深入探讨Pandas中一系列数据连接、合并、加入、添加、重构函数,包括merge、concat、join、append、stack和unstack。通过理解这些功能,你将能够更灵活地处理和转换数据,提高数据分析和清理的效率。

image-20240211142931700

1. merge函数

merge函数用于将两个数据框基于一个或多个键进行连接。以下是一个简单的示例:

import pandas as pd

# 创建两个数据框
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                    'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
                    'value': [5, 6, 7, 8]})

# 使用merge进行连接
merged_df = pd.merge(df1, df2, on='key')

print(merged_df)

在这个例子中,我们使用merge函数基于’key’列连接了两个数据框。输出将是一个包含共同键的新数据框。

image-20240211142352520

2. concat函数

concat函数用于沿着指定轴连接多个数据框。以下是一个示例:

# 创建两个数据框
df1 = pd.DataFrame({'A': [1, 2],
                    'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6],
                    'B': [7, 8]})

# 使用concat进行连接
concatenated_df = pd.concat([df1, df2])

print(concatenated_df)

在这个例子中,我们使用concat函数沿着默认的行轴连接了两个数据框。你还可以通过指定axis参数来沿着列轴连接。

image-20240211142441586

3. join函数

join函数用于将两个数据框基于索引进行连接。以下是一个简单的例子:

# 创建两个数据框
df1 = pd.DataFrame({'value': [1, 2]}, index=['A', 'B'])
df2 = pd.DataFrame({'value': [3, 4]}, index=['B', 'C'])

# 使用join进行连接
joined_df = df1.join(df2, how='inner')

print(joined_df)

在这个例子中,我们使用join函数将两个数据框基于索引进行了内连接(inner join)。

4. append函数

append函数用于将一个数据框追加到另一个数据框的末尾。以下是一个例子:

# 创建两个数据框
df1 = pd.DataFrame({'A': [1, 2],
                    'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6],
                    'B': [7, 8]})

# 使用append进行连接
appended_df = df1.append(df2)

print(appended_df)

在这个例子中,我们使用append函数将df2追加到了df1的末尾。

5. stack和unstack函数

stackunstack函数用于在行和列之间进行数据重构。以下是一个示例:

# 创建一个多层索引的数据框
arrays = [['A', 'A', 'B', 'B'],
          [1, 2, 1, 2]]
multi_index = pd.MultiIndex.from_arrays(arrays, names=('letters', 'numbers'))
df = pd.DataFrame({'value': [1, 2, 3, 4]}, index=multi_index)

# 使用stack进行数据重构
stacked_df = df.stack()

print(stacked_df)

在这个例子中,我们使用stack函数将列标签的层次结构转移到行索引,创建了一个更紧凑的数据框。

6. stackunstack 函数

stackunstack 函数是用于在行和列之间进行数据重构的强大工具。下面是一个例子:

# 创建一个多层索引的数据框
arrays = [['A', 'A', 'B', 'B'],
          [1, 2, 1, 2]]
multi_index = pd.MultiIndex.from_arrays(arrays, names=('letters', 'numbers'))
df = pd.DataFrame({'value': [1, 2, 3, 4]}, index=multi_index)

# 使用unstack进行数据重构
unstacked_df = df.unstack()

print(unstacked_df)

在这个例子中,我们使用unstack函数将行索引的层次结构转移到列,使数据框更为直观。

image-20240211142522978

7. set_indexreset_index 函数

set_indexreset_index 函数用于重新设置数据框的索引,有助于灵活地处理数据框的结构。

# 创建一个简单的数据框
df = pd.DataFrame({'A': [1, 2, 3],
                   'B': [4, 5, 6]})

# 使用 set_index 将 'A' 列设置为新的索引
df_set_index = df.set_index('A')

print(df_set_index)

在这个例子中,我们使用 set_index 将 ‘A’ 列设置为新的索引,这可以方便地基于该列进行数据检索。

# 使用 reset_index 重新设置索引
df_reset_index = df_set_index.reset_index()

print(df_reset_index)

reset_index 则是用于将设置的新索引还原为默认整数索引。这在某些情况下很有用,特别是在进行一些索引操作后需要将数据框还原到初始状态。

8. pd.merge 的更高级用法

除了基本的连接操作,pd.merge 还提供了一些高级用法,如多键连接、不同连接方式等。

# 创建两个数据框
df1 = pd.DataFrame({'key1': ['A', 'B', 'C'],
                    'key2': ['X', 'Y', 'Z'],
                    'value': [1, 2, 3]})
df2 = pd.DataFrame({'key1': ['A', 'B', 'C'],
                    'key2': ['X', 'Z', 'Y'],
                    'value': [4, 5, 6]})

# 多键连接
multikey_merge = pd.merge(df1, df2, on=['key1', 'key2'])

print(multikey_merge)

在这个例子中,我们使用 pd.merge 进行多键连接,通过传递一个键的列表,实现更精确的匹配。

9. 分层索引的运用

分层索引是 Pandas 中一项重要的功能,通过它,你可以创建具有多层次的行或列索引,更灵活地组织和访问数据。

# 创建一个包含分层索引的数据框
data = {'value': [1, 2, 3, 4, 5, 6],
        'attribute': ['A', 'B', 'C', 'A', 'B', 'C']}
df_multiindex = pd.DataFrame(data, index=[['Group1', 'Group1', 'Group1', 'Group2', 'Group2', 'Group2'],
                                          ['X', 'Y', 'Z', 'X', 'Y', 'Z']],
                              columns=['value', 'attribute'])

print(df_multiindex)

在这个例子中,我们创建了一个包含两层分层索引的数据框,其中第一层为 ‘Group1’ 和 ‘Group2’,第二层为 ‘X’、‘Y’ 和 ‘Z’。这样的数据结构使得我们可以更方便地进行多层次的数据分析和操作。

image-20240211142616907

10. 处理缺失数据

数据中经常会包含缺失值,而 Pandas 提供了一系列处理缺失数据的方法,例如 dropnafillna

# 创建一个包含缺失值的数据框
df_missing = pd.DataFrame({'A': [1, 2, np.nan, 4],
                           'B': [5, np.nan, 7, 8]})

# 使用 dropna 删除包含缺失值的行
df_cleaned = df_missing.dropna()

print(df_cleaned)

在这个例子中,我们使用 dropna 删除包含缺失值的行。除此之外,你还可以使用 fillna 来填充缺失值,以便更好地保留数据。

总结:

通过本文,我们深入探讨了 Pandas 中一系列重要的数据连接、合并、加入、添加、重构函数,包括 mergeconcatjoinappendstackunstackset_indexreset_index 等。这些功能为数据科学家和分析师提供了强大的工具,使其能够更灵活地处理和分析各种数据。

我们学习了基本的连接和合并操作,了解了如何使用不同的连接方式以及处理多键连接。同时,介绍了分层索引的运用,使数据结构更为灵活。

此外,我们还探讨了处理缺失数据的方法,包括使用 dropna 删除缺失值所在的行和使用 fillna 填充缺失值,从而在数据清理和准备阶段更加得心应手。

通过不断练习和应用这些知识,你将更加熟练地处理不同类型的数据,并能够更高效地进行数据分析和挖掘。Pandas 提供的这些功能和技巧,无疑为数据科学领域的从业者提供了强大的支持,希望本文能够为你在数据处理的学习和实践中提供有益的指导。祝你在数据科学的旅程中取得更大的成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1445682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pycharm控制STM32F103ZET6拍照并上位机接收显示(OV7670、照相机、STM32、TFTLCD)

基于STM32的照相机 准备工作最终效果一、下位机1、主函数2、OV7670初始化 二、上位机1、控制拍照2、接收图片数据 三、资源获取 准备工作 一、硬件及片上资源: 1,串口1(波特率:921600,PA9/PA10通过usb转ttl连接电脑,或者其他方法)上传图片数据至上位机 2,串口2(波特…

Unity性能优化

非原创 ,参考文章: 2024 腾讯游戏客户端面经 - 知乎 (zhihu.com) C#篇 1.Unity API GameObject.GetComponent Unity是基于组件的开发方式,所以GetComponent是一个高频使用的函数 每次调用GetComponent 时,Unity都要去遍历所有的组件来找到目标组件…

首次安装Mysql数据库

1、在mysql官网下载自己需要的版本 2、选择安装类型 3、 检查一下需求版本 4、 这里可能会弹出如下信息,先不用管这一步,点击Yes继续即可 5、 安装需要的环境,点击执行就可以,此过程会比较慢 如下就是全面安装完成了,点击next即可

寒假9-蓝桥杯训练

//轨道炮 #include<iostream> using namespace std; #include<algorithm> int logs[100010]; int main() {int n;cin >> n;for (int i 1;i < n;i){cin >> logs[i];}sort(logs 1, logs n 1);int ans 1000000000;for (int i 2;i < n;i){if (…

Java外卖小程序管理系统

技术架构&#xff1a; springboot ssm mysql redis 有需要该项目的小伙伴可以私信我你的Q。 功能描述&#xff1a; 商品管理&#xff1a;新增商品、所有商品 菜单管理&#xff1a;菜单管理、菜单分类 订单管理&#xff1a;订单总览&#xff08;包括未付款、已付款、已…

Python中的正则表达式(一)

在Python中&#xff0c;正则表达式是一种用于匹配和操作字符串的强大工具。正则表达式由一系列字符和特殊字符组成&#xff0c;用于定义搜索模式。 在Python中&#xff0c;我们使用内置的 re 模块来操作正则表达式。要使用正则表达式&#xff0c;我们首先需要导入 re 模块。 下…

没更新的日子也在努力呀,布局2024!

文章目录 ⭐ 没更新的日子也在努力呀⭐ 近期的一个状态 - 已圆满⭐ 又到了2024的许愿时间了⭐ 开发者要如何去 "创富" ⭐ 没更新的日子也在努力呀 感觉很久没有更新视频了&#xff0c;好吧&#xff0c;其实真的很久没有更新短视频了。最近的一两个月真的太忙了&#…

mysql经典4张表问题

1.数据库表结构关联图 2.问题&#xff1a; 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数3.查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4、查询名字中含有"风"字的学生信息5、查询课程名称为"数学"&…

2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏

文章目录 1 特殊文件夹 Editor2 在 Unity 菜单栏中添加自定义页签3 在 Hierarchy 窗口中添加自定义页签4 在 Project 窗口中添加自定义页签5 在菜单栏的 Component 菜单添加脚本6 在 Inspector 为脚本右键添加菜单7 加入快捷键8 小结 1 特殊文件夹 Editor ​ Editor 文件夹是 …

【网站项目】027学校运动会信息管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

C#,普洛尼克数(Pronic Number)的算法与源代码

1 普洛尼克数(pronic number) 普洛尼克数(pronic number)&#xff0c;也叫矩形数、欧波朗数(oblong number)&#xff0c;是两个连续非负整数的积&#xff0c;即mn*(n1)。第n个普洛尼克数侪是n个三角形数个两倍。 2 计算结果 3 源程序 using System; namespace Legalsoft.Tru…

VSCode python插件:找不到自定义包导致语法解析失败

众所周知&#xff0c;在python源码中&#xff0c;我们可以通过 sys.path.append("path-to-lib") 来为python解释器添加自定义包的寻找路径。 但是vscode的默认python插件可没法聪明到根据这句话去找这个包&#xff0c;这就会导致后续代码中使用了这个库的部分无法享…

人力资源智能化管理项目(day05:角色管理)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 搭建页面结构 分页组件&#xff1a;设置layout&#xff0c;表示需要显示的内容&#xff0c;用逗号分隔&#xff0c;布局元素会依次显示。prev表示上一页&#xff0c;next为…

AI大模型学习笔记之四:生成式人工智能(AIGC)是如何工作的?

OpenAI 发布 ChatGPT 已经1年多了&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;也已经广为人知&#xff0c;我们常常津津乐道于 ChatGPT 和 Claude 这样的人工智能系统能够神奇地生成文本与我们对话&#xff0c;并且能够记忆上下文情境。 Midjunery和DALLE 这样的AI…

Qt【一】:Qt3个窗口类的区别、VS与QT项目转换

一、Qt3个窗口类的区别 QMainWindow&#xff1a;包含菜单栏、工具栏、状态栏 QWidget&#xff1a;普通的一个窗口&#xff0c;什么也不包括 QDialog&#xff1a;对话框&#xff0c;常用来做登录窗口、弹出窗口&#xff08;例如设置页面&#xff09; QDialog实现简易登录界面…

AI - 碰撞避免算法分析(VO/RVO)

VO/RVO VO和RVO的原理本身理解起来比较简单的&#xff0c;就是根据两个圆形的相对半径&#xff0c;相对速度&#xff0c;相对位置&#xff0c;求出碰撞区域&#xff0c;然后将速度移出碰撞区域。VO是双方都是当作对方速度不变的情况下&#xff0c;各自都将速度完整的移出了会碰…

Stream流学习笔记

Stream流 创建流中间操作1、filter2、map3、distinct4、sorted5、limit6、skip7、flatMap 终结操作1、forEach2、count3、max&min4、collect5、查找与匹配 创建流 单例集合&#xff1a;集合对象.stream() List<Integer> list new ArrayList<>(); Stream<…

Centos7安装nginx yum报错

Centos7安装nginx yum报错&#xff0c;yum源报错解决办法&#xff1a; 1、更新epel源后&#xff0c;出现yum报错 [roothacker117 ~]# yum install epel-release&#xff08;安装成功&#xff09; [roothacker117 ~]# yum install nginx&#xff08;安装失败&#xff0c;提示如…

极市平台 | 卡车货车、野外火灾、抽烟识别等开源数据集资源汇总

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;卡车货车、野外火灾、抽烟识别等开源数据集资源汇总 最近正好在做这方面的项目。本文收集了一些卡车货车、抽烟和野外火灾等开源数据集资源&#xff0c;…

springboot182基于springboot的网上服装商城

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…