首页 > 其他分享 >pandas数据处理几个数据合并方法的区别

pandas数据处理几个数据合并方法的区别

时间:2024-07-23 17:44:58浏览次数:7  
标签:right Key 合并 DataFrame merge pd 数据处理 pandas left

 以下是在Python中的Pandas中进行合并、连接和连接的不同方式和方法:

Python Pandas 中的 DataFrame concat()

concat() 函数负责执行沿轴的连接操作的所有繁重工作,同时对其他轴上的索引(如果有)执行可选的集合逻辑(并集或交集)。在此示例中,创建了三个具有相同的列但不同索引的DataFrame(df1df2和)。使用时,这些Pandas DataFrame非常重要,从而生成一个组合DataFrame,其中每个原始DataFrame中的行相互连通。df3pd.concat()

  • Python3
 
# Creating first dataframe df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],                     'B': ['B0', 'B1', 'B2', 'B3'],                     'C': ['C0', 'C1', 'C2', 'C3'],                     'D': ['D0', 'D1', 'D2', 'D3']},                    index=[0, 1, 2, 3])   # Creating second dataframe df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],                     'B': ['B4', 'B5', 'B6', 'B7'],                     'C': ['C4', 'C5', 'C6', 'C7'],                     'D': ['D4', 'D5', 'D6', 'D7']},                    index=[4, 5, 6, 7])   # Creating third dataframe df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],                     'B': ['B8', 'B9', 'B10', 'B11'],                     'C': ['C8', 'C9', 'C10', 'C11'],                     'D': ['D8', 'D9', 'D10', 'D11']},                    index=[8, 9, 10, 11])   # Concatenating the dataframes pd.concat([df1, df2, df3])

显示:      ABCD 

0 A0 B0 C0 D0 
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11

Python 中 Pandas 的 Python merge()

DataFrames 合并 Pandas 提供了一个单一的函数,merge(),DataFrame 对象之间所有标准数据库连接操作的入口点。这里示例中,创建了两个 DataFrames(left和),它们有一个共同的键列“Key”该函数使用内连接根据它们的共同“Key”列合并这些DataFrame,从而生成一个组合DataFrame,其中仅包含两个DataFrame中键值匹配的行。rightpd.merge()

  • Python3
 
# Dataframe created left = pd.DataFrame({'Key': ['K0', 'K1', 'K2', 'K3'],                      'A': ['A0', 'A1', 'A2', 'A3'],                      'B': ['B0', 'B1', 'B2', 'B3']})   right = pd.DataFrame({'Key': ['K0', 'K1', 'K2', 'K3'],                       'C': ['C0', 'C1', 'C2', 'C3'],                       'D': ['D0', 'D1', 'D2', 'D3']})   # Merging the dataframes pd.merge(left, right, how='inner', on='Key')

显示:

  键 ABCD 
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3

左合并

pd.merge()函数how='left'执行左连接,将leftDataFrame与right“Key”上的DataFrame合并。DataFrame中的所有行都left将被保留,并且rightDataFrame中的匹配行将附加其各自的值。

  • Python3
 
left_merged = pd.merge(left, right, how='left', on='Key') print(left_merged)

显示:

  键 ABCD 
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3

右合并

pd.merge()函数how='right'执行右连接,将leftDataFrame与right“Key”上的DataFrame合并。DataFrame中的所有行都right将被保留,并且leftDataFrame中的匹配行将附加其各自的值。

  • Python3
 
right_merged = pd.merge(left, right, how='right', on='Key') print(right_merged)

显示:

  键 ABCD 
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3

外部合并

函数pd.merge()执行how='outer'外连接,将leftDataFrame与right“Key”列上的DataFrame完全合并。这将生成一个包含leftrightDataFrame中所有行的DataFrame,并在没有匹配项的位置用NaN填充恢复值。

  • Python3
 
outer_merged = pd.merge(left, right, how='outer', on='Key') print(outer_merged)

显示:

  键 ABCD 
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3

Python Pandas 中的 DataFrames join()

在此示例中,leftrightDataFrames均使用键“K0”、“K1”、“K2”和“K3”进行索引。该操作根据其索引合并DataFrames,根据共享索引将中的列“A”和“B”与中的列“C”和“D”left.join(right)合并。leftright

  • Python3
 
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],                      'B': ['B0', 'B1', 'B2', 'B3']},                     index=['K0', 'K1', 'K2', 'K3'])   right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],                       'D': ['D0', 'D1', 'D2', 'D3']},                      index=['K0', 'K1', 'K2', 'K3'])   # Joining the dataframes left.join(right)

输出

     ABCD 
K0 A0 B0 C0 D0
K1 A1 B1 C1 D1
K2 A2 B2 C2 D2
K3 A3 B3 C3 D3
 

对比总结:

从高层次来看:

  • .concat()只需将多个DataFrame垂直堆叠在一起,或者在索引对齐后水平缝合
  • .merge()首先对齐两个DataFrame' 选定的公共列或索引,然后从每个对齐的行中挑选剩余的列DataFrame

进一步来说,.concat()

  • 是顶级 pandas 函数
  • DataFrame 垂直或水平组合两个或多个熊猫
  • 水平组合时仅对齐索引
  • 当任何一个DataFrame包含重复索引时就会出错。
  • 默认为外连接,可选择内连接

.merge()

  • 既作为顶级 pandas 函数存在,又作为DataFrame方法存在(从 pandas 1.0 开始)
  • DataFrame水平方向精确合并两个
  • 将调用方DataFrame的列或索引与其他方 DataFrame的列或索引对齐
  • 通过执行笛卡尔积来处理连接列或索引上的重复值
  • 默认为内连接,有左、外、右选项

请注意,执行时pd.merge(left, right),如果left有两行包含来自连接列或索引的相同值,则每行将与right相应的行合并,从而产生笛卡尔积。另一方面,如果.concat()用于合并列,我们需要确保在任一中都不存在重复的索引DataFrame

从实际情况来看:

  • .concat()同质组合时先考虑DataFrame.merge()互补组合时先考虑DataFrame
  • 如果需要垂直合并,则使用.concat()。如果需要通过列水平合并,则使用.merge(),默认情况下会在共同的列上进行合并。

 

标签:right,Key,合并,DataFrame,merge,pd,数据处理,pandas,left
From: https://www.cnblogs.com/gao1261828/p/18319126

相关文章

  • 重测序数据处理得到vcf文件
    重测序数据处理得到vcf文件文章目录重测序数据处理前言1.数据是rawdata,需用fastp对数据进行质控和过滤2.利用getorganelle软件组装叶绿体基因组3.检查基因组大小,确认是否完整,然后和已知的红毛菜科叶绿体基因组一起构树4.根据树形结果挑选坛紫菜个体,为了后续分析方......
  • Python字符串:提取重复和随机合并的子字符串
    重复和合并字符串的示例:16.01068.0%08p%.a.p.a.要提取的所需子字符串:16.008%p.a.完整示例:CCoonnttiinnggeennttCCoouuppoonn16.01068.0%08p%.a.p(.Ma.o(nMtholyn)thly)所需子字符串:ContingentCoupon16.008%p.a.(Monthly)我的问题是当原始......
  • pandas 读取 SQL 表会引发 NotImplementedError
    有人可以帮忙照顾熊猫吗?我无法读取sqlite3表。这是我的代码:importpandasaspdimportsqlite3assqwithsq.connect("master.db")ascon:table="personal"df=pd.read_sql_table(table,con)数据库文件和代码位于同一目录中。Python引发No......
  • Python Pandas 从使用第 3 部分 API 自动生成的 Excel 文件中读取不一致的日期格式
    我正在使用PDF4meAPI将PDF发票转换为Excel文件。API可以正确读取日期。但是,当我打开Excel文件时,日期显示不一致:某些日期以正确的格式(dd/mm/yyyy)显示,而其他日期以错误的mm/dd/yyyy格式显示。当该月的某天小于或等于12时,似乎会出现这种不一致。......
  • 轻松掌握:两个方法合并ZIP分卷压缩包
    在文件传输和存储过程中,为了绕过文件大小限制或优化下载速度,我们常常会将大型文件分割成多个较小的ZIP分卷压缩包。然而,在接收这些分卷后,如何正确地将它们合并回原始的ZIP文件,可能是许多用户面临的一个问题。本文将介绍两种简单有效的方法来合并ZIP分卷压缩包。方法一:我们可......
  • Pandas:递归的性能优化
    我有一个代码,看起来像forindex,rowindata.iterrows():data.loc[index,"myCol"]=someFunc(data.loc[index-1,"myCol")该代码正在使用递归,因此我无法对其进行矢量化,因为在许多与iterrows性能相关的问题中都建议使用递归。我在性能方面优化它的最佳方法是什......
  • vue3 + arco design vue 表身单元格合并
    表格展示效果如下图:后端返回的数据格式如下arcodesignvue单元格合并还挺复杂的,今天接到这个需求时,还是有点无从下手,后来经过一些列尝试之后得出如下代码<a-tableclass="table-data":data="tableData":bordered="{wrapper:true,cell:true}":span-method="dat......
  • Pandas 中按组排列的前 2 个时间戳的差异
    我有一个包含登录日期和时间戳的用户表。我正在尝试计算每个用户最近两次登录之间的差异。例如(df):Userlogints|||342024-07-1007:49:11.773342024-0......
  • 在 value_counts pandas 分类数据中包含零
    这是我之前提出的问题的后续问题。老问题可以在这里找到答案来自@jezrael现在我想绘制成绩。用于绘制我可以做的所有成绩但是,我无法弄清楚如何绘制每个成绩组(包括零计数)。counts_gardes=df1['new'].value_counts(sort=False)counts_gardes.......
  • Pandas
    Pandas导入importnumpyasnpimportpandasaspd载入数据相对路径df=pd.read_csv('')绝对路径df=pd.read_csv(r'')逐块读取chunker=pd.read_csv(‘./文件名’,chunksize=1000)#每一千个行为一个数据模块foriinchunker将表头改为中文df=pd.read_csv(‘文......