Pandas - 数据合并

news/2024/7/5 7:26:36

        DataFrame数据合并主要使用merge()方法和concat()方法。

1.数据合并(merge()方法)

        Pandas模块的merge()进行数据合并时,两个DataFrame对象必须有相同的列。

        1.常规合并

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '语文':[110,105,109],
                    '数学':[105,88,120],
                    '英语':[99,115,130]})

df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '体育':[34.5,39.7,38]})

df_merge=pd.merge(df1,df2,on='编号')
print(df_merge)

        该示例中,编号是相同的,所以会将df2中“体育”作为新的一列加入到df1中。 

        2.通过索引合并

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '语文':[110,105,109],
                    '数学':[105,88,120],
                    '英语':[99,115,130]})

df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '体育':[34.5,39.7,38]})

df_merge=pd.merge(df1,df2,left_index=True,right_index=True)
print(df_merge)

        3.对合并数据去重 

         使用到how属性,就是让df1保留所有的行列数据,df2则根据df1的行列进行补全。

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '语文':[110,105,109],
                    '数学':[105,88,120],
                    '英语':[99,115,130]})

df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '体育':[34.5,39.7,38]})

df_merge=pd.merge(df1,df2,on='编号',left_index=True,right_index=True)
print(df_merge)
df_merge=pd.merge(df1,df2,on='编号',how='left')
print(df_merge)

        4.多对一的数据合并

        根据共有列中的数据进行合并,df2根据df1的行列进行补全。

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
                    '学生姓名':['明日同学','高猿员','钱多多']})

df2 = pd.DataFrame({'编号':['mr001','mr001','mr003'],
                    '语文':[110,105,109],
                    '数学':[105,88,120],
                    '英语':[99,115,130],
                    '时间':['1月','2月','1月']})

df_merge=pd.merge(df1,df2,on='编号')
print(df_merge)

        5.多对多的数据合并

        根据共有列中的数据进行合并,df2,df1相互补全。

import pandas as pd

df1 = pd.DataFrame({'编号':['mr001','mr002','mr003','mr001','mr001'],
                    '体育':[34.5,39.7,38,33,35]})

df2 = pd.DataFrame({'编号':['mr001','mr002','mr003','mr003','mr003'],
                    '语文':[110,105,109,110,108],
                    '数学':[105,88,120,123,119],
                    '英语':[99,115,130,109,128]})

df_merge=pd.merge(df1,df2)
print(df_merge)

2.数据合并(concat()方法)

        1.相同字段的表首尾相连

dfs = [df1,df2,df3]
result = pd.concat(dfs)

        如果需要标记源数据来自于哪张表,可以使用:

        result = pd.concat(dfs, keys=['第一张表','第二张表','第三张表']) 

        2.横向表合并(行对齐)

        用于数据列名不一致,缺失的数据使用Nan填充 。其中axis=1代表行合并。

result = pd.concat([df1,df4],axis=1)

        3.交叉合并

        交叉合并需要加上join参数,如值为inner,结果为两张表的交集;如果值为outer,结果为两张表的并集。 

result = pd.concat([df1,df4],axis=1,join='inner')

        4.指定表对其数据(行对齐)

         如果指定参数join_axes,就可以指定根据哪张表来对齐数据。如下述代码,根据df4表对其,结果表的行术和df4的行术一致,在此基础上拼接df1表。

result = pd.concat([df1,df4],axis=1,join_axes[df4.index])

         

《python数据分析》p120


http://lihuaxi.xjx100.cn/news/1766964.html

相关文章

(六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题

前言 本节内容是关于使用分布式锁解决并发访问“超卖”问题的最终篇,在前面的章节中我们介绍了使用mysql的行锁、乐观锁、悲观锁解决并发访问导致的超卖问题,存在的问题是行锁、乐观锁、悲观锁不太灵活,需要和具体的业务耦合到一起&#xff…

【PTE-day05 宽字节注入】

1、函数 过滤输入的函数: addslashes mysql_real_escape_string mysql_escape_string当字符的大小为一个字节时,称之为窄字节 例如ascii编码 当字符的大小为两个字节时,称之为宽字节 例如GB2312、GBK、GB8030 mysql使用GBK编码时,默认的会认为两个字符为一个汉字,前一个字…

省钱兄短剧短视频小程序是如何运营的?

随着短视频的兴起,越来越多的人热衷于在闲暇时间刷短视频。在这种背景下,省钱兄短剧短视频小程序应运而生,以一种新颖、有趣的方式满足了用户的观看需求。本文将详细介绍这个小程序的成功运营策略。 产品特点 内容丰富:省钱兄短…

1212. 地宫取宝

题目&#xff1a; 1212. 地宫取宝 - AcWing题库 思路&#xff1a;dp&#xff08;最长上升子序列和摘花生的结合&#xff09; 代码&#xff1a; #include<iostream> using namespace std; const int N 55; const int MOD 1000000007;int n, m, k; int w[N][N];//每个坐…

图形界面应用案例——关灯游戏(以及扩展)(python)

7.8 图形界面应用案例——关灯游戏 题目: [案例]游戏初步——关灯游戏。 关灯游戏是很有意思的益智游戏,玩家通过单击关掉(或打开)一盏灯。如果关(掉(或打开)一个电灯,其周围(上下左右)的电灯也会触及开关,成功地关掉所有电灯即可过关。 图7-43 关灯游戏运行效…

Gerrit lfs安装及配置

Gerrit版本&#xff1a;3.1.4 lfs下载&#xff1a;Zuul Gerrit CI界面已经没有3.1.4对应版本的lfs.jar了&#xff0c;需要从上面的页面下载。 一、安装配置lfs 将上面下载的lfs.jar放到$GERRIT_SITE/plugins目录。 修改配置文件&#xff1a;$GERRIT_SITE/etc/gerrit.config …

2023/11/8JAVA学习

多个条件也可以&&放在一块,支持链式编程 map()数据加工,一个对象转化为另一个 不能这样写 不会去重报错

小程序制作(超详解!!!)第十五节 自动随机变化的三色旗

1.例题描述 设计一个小程序&#xff0c;开始时界面上显示一个三色旗和一个按钮&#xff0c;当点击按钮时&#xff0c;三色旗的颜色会发生随机变化&#xff0c;即使不点击按钮&#xff0c;三色旗的颜色也会每隔一定时间自动发生变化。 2.index.wxml <view class"box&…