当前位置:首页 » 《我的小黑屋》 » 正文

【python】pandas:DataFrame合并技巧详解

5 人参与  2024年11月05日 16:01  分类 : 《我的小黑屋》  评论

点击全文阅读


一、引言

在数据分析过程中,经常需要将多个数据集合并为一个统一的数据集。Pandas库提供了多种合并DataFrame的方法,以满足不同场景下的需求。本文将详细介绍这些合并方法,并通过示例展示其用法。

二、基于键的合并(merge)

基于键的合并是最常用的DataFrame合并方法之一。它类似于SQL中的JOIN操作,可以根据两个DataFrame之间的共同列(键)进行合并。以下是一个示例:

用法:根据两个DataFrame之间的共同列(键)进行合并。参数说明leftright:要合并的两个DataFrame。how:合并类型,包括’inner’(内连接)、‘left’(左外连接)、‘right’(右外连接)、‘outer’(全外连接)。默认为’inner’。on:用于连接的列名。如果两个DataFrame中有相同名称的列,则默认使用该列作为连接键。left_onright_on:分别指定左表和右表中用于连接的列名。当左右表的连接键列名不同时使用。left_indexright_index:是否使用左表或右表的行索引作为连接键。默认为False。suffixes:用于在合并后的DataFrame中处理重名列的后缀,默认为(‘_x’, ‘_y’)。 优缺点: 优点:可以灵活地根据指定列进行合并,支持多种合并类型。缺点:当数据量较大时,合并操作可能会消耗较多内存和时间。 示例
import pandas as pd# 创建两个示例DataFramedf1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value1': [1, 2, 3, 4]})df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value2': [5, 6, 7, 8]})# 基于'key'列进行合并merged_df = pd.merge(df1, df2, on='key', how='inner')  # 默认为inner joinprint(merged_df)# 结果:只保留两个DataFrame中共有的'key'值  #      key  value1  value2  # 0    B       2       5  # 1    D       4       6

在上面的示例中,我们使用了pd.merge()函数,并指定了on参数为合并的键(‘key’)。how参数用于指定合并类型,默认为’inner’,表示只保留两个DataFrame中共有的键。还可以选择’outer’、‘left’、'right’等类型。

三、沿着轴合并(concat)

沿着轴合并适用于将多个DataFrame沿着行或列方向合并。以下是一个示例:

用法:沿着行(axis=0)或列(axis=1)方向合并多个DataFrame。参数说明objs:要合并的DataFrame列表或字典。axis:合并的轴,0表示行,1表示列。默认为0。ignore_index:是否重置合并后的DataFrame的索引。默认为False。 优缺点: 优点:适用于将多个具有相同结构的数据集合并为一个更大的数据集。缺点:如果沿着列合并,则要求所有DataFrame的行数相同。 示例
# 创建两个示例DataFramedf3 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})df4 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})# 沿着行方向(axis=0)合并concatenated_df = pd.concat([df3, df4], ignore_index=True)print(concatenated_df)# 结果:df3和df4的行被合并  #      A  B  # 0    1  3  # 1    2  4  # 2    5  7  # 3    6  8

在上面的示例中,我们使用了pd.concat()函数,并指定了axis=0表示沿着行方向合并。ignore_index=True参数用于重置索引。

四、基于索引的合并(join)

基于索引的合并通常用于DataFrame和Series之间的操作。但如果你有两个具有相同索引的DataFrame,并且希望基于索引合并列,你可以使用merge方法或先将其中一个转换为Series。

用法:DataFrame.join(other, on=None, how=‘left’, lsuffix=‘’, rsuffix=‘’, sort=False)

参数说明

other:要连接的另一个DataFrame或Series。on:连接的列名。如果为None,则使用索引。how:连接方式,可选值为’left’, ‘right’, ‘outer’, ‘inner’。默认为’left’。lsuffix:左DataFrame中重复列的后缀。rsuffix:右DataFrame中重复列的后缀。sort:是否对结果进行排序。默认为False。

优缺点

优点:适用于基于索引的合并,对于Series与DataFrame之间的操作特别方便。缺点:对于两个DataFrame之间的基于列名的合并,通常推荐使用merge方法,因为join方法的灵活性相对较低。

示例

假设我们有两个DataFrame:df1和df2,它们有相同的索引。

import pandas as pdindex = ['A', 'B', 'C', 'D']df1 = pd.DataFrame({'value1': [1, 2, 3, 4]}, index=index)df2 = pd.DataFrame({'value2': [5, 6, 7, 8]}, index=index)result = df1.join(df2)# 结果:df1和df2的列被合并  # value1  value2  # A       1       5  # B       2       6  # C       3       7  # D       4       8

五、追加行(append)

append方法用于在Pandas DataFrame中追加行数据。它将另一个DataFrame、Series或类似字典的对象的数据添加到调用者DataFrame的末尾,并返回一个新的DataFrame对象。

用法:DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)

参数说明

other:要追加的DataFrame、Series或类似字典的对象。ignore_index:是否忽略索引,默认为False。如果为True,则在结果中重新标记行的索引。verify_integrity:如果为True,在创建具有重复索引的情况下会引发ValueError异常,默认为False。sort:如果为True,则在列不对齐时对列进行排序,默认为False。

优缺点

优点:简单直观,可以快速地将一个DataFrame的行追加到另一个DataFrame的末尾。缺点:如果两个DataFrame的列名不完全一致,可能会导致数据错位或丢失。此外,如果数据量较大,追加操作可能会消耗较多内存和时间。

示例

import pandas as pddf1 = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])df2 = pd.DataFrame([[5, 6], [7, 8]], columns=['A', 'B'])result = df1.append(df2, ignore_index=True)# 结果:df1和df2的行被合并  #      A  B  # 0    1  3  # 1    2  4  # 2    5  7  # 3    6  8

在上面的示例中,我们使用了append()方法将df4的行追加到df3的末尾,并通过ignore_index=True重置了索引。

六、总结

基于键的合并:适用于根据共同列的值匹配和组合行,常见于关联不同数据源的表格数据。沿着轴合并:适用于将多个DataFrame沿着行或列方向组合成一个更大的DataFrame,常见于时间序列数据、日志数据等的拼接。基于索引的合并:适用于根据索引匹配和组合行,常见于时间序列数据、分类数据等的匹配和组合。追加行:适用于将新数据添加到现有DataFrame的末尾,常见于数据收集和分析过程中的结果添加。

点击全文阅读


本文链接:http://zhangshiyu.com/post/182854.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1