一文搞懂Python中Pandas数据合并

我来为你详细讲解一下Python中Pandas数据合并的攻略。

1. 简介

Pandas是一个Python第三方库,提供了一种高效、便捷的数据处理工具,常用于数据清洗、分析和可视化。数据合并是数据处理过程中的常见操作之一,Pandas提供了多种数据合并手段,具体如下:

  • concat:可以将两个或多个DataFrame对象进行简单的连接操作;
  • merge:可以根据一列或多列进行连接操作;
  • join:可以根据DataFrame的索引进行连接操作。

2. concat操作

concat操作可以将两个或多个DataFrame对象沿着某个轴进行简单的连接操作,语法如下:

pd.concat(objs, axis=0, ignore_index=False)
  • objs:需要连接的DataFrame对象,可以是列表、字典或Series对象;
  • axis:连接的轴方向,0表示纵向,1表示横向,默认为0;
  • ignore_index:是否忽略原来的索引,重置索引,默认为False。

示例1:纵向连接

假设我们有两个DataFrame对象df1和df2,如下所示:

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']})

我们可以使用concat将它们沿着纵向进行连接:

df3 = pd.concat([df1, df2], axis=0, ignore_index=True)
print(df3)

输出结果为:

    A   B   C   D
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

示例2:横向连接

假设我们有两个DataFrame对象df1和df2,如下所示:

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})

我们可以使用concat将它们沿着横向进行连接:

df3 = pd.concat([df1, df2], axis=1)
print(df3)

输出结果为:

    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3

3. merge操作

merge操作可以根据一列或多列进行连接操作,语法如下:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False)
  • left:左侧的DataFrame对象;
  • right:右侧的DataFrame对象;
  • how:连接方式,包括'left'、'right'、'outer'、'inner',默认为'inner';
  • on:连接的列名,如果左右两个DataFrame的列名不同,需要分别指定;
  • left_on:左侧的连接列名;
  • right_on:右侧的连接列名;
  • left_index:是否使用左侧的索引作为连接键;
  • right_index:是否使用右侧的索引作为连接键。

示例3:基于一列进行连接

假设我们有两个DataFrame对象df1和df2,如下所示:

df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})

我们可以使用merge将它们基于key列进行连接:

df3 = pd.merge(df1, df2, on='key')
print(df3)

输出结果为:

  key   A   B   C   D
0  K0  A0  B0  C0  D0
1  K1  A1  B1  C1  D1
2  K2  A2  B2  C2  D2
3  K3  A3  B3  C3  D3

示例4:基于多列进行连接

假设我们有两个DataFrame对象df1和df2,如下所示:

df1 = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                    'key2': ['K0', 'K1', 'K0', 'K1'],
                    'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                    'key2': ['K0', 'K0', 'K0', 'K0'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})

我们可以使用merge将它们基于key1和key2两列进行连接:

df3 = pd.merge(df1, df2, on=['key1', 'key2'])
print(df3)

输出结果为:

  key1 key2   A   B   C   D
0   K0   K0  A0  B0  C0  D0
1   K1   K0  A2  B2  C1  D1
2   K1   K0  A2  B2  C2  D2
3   K2   K1  A3  B3  C3  D3

4. join操作

join操作可以根据DataFrame的索引进行连接操作,语法如下:

left.join(right, how='outer')
  • left:左侧的DataFrame对象;
  • right:右侧的DataFrame对象;
  • how:连接方式,包括'left'、'right'、'outer'、'inner',默认为'outer'。

示例5:基于索引进行连接

假设我们有两个DataFrame对象df1和df2,如下所示:

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']},
                    index=['K0', 'K1', 'K2', 'K3'])
df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                    index=['K0', 'K1', 'K2', 'K3'])

我们可以使用join将它们基于索引进行连接:

df3 = df1.join(df2)
print(df3)

输出结果为:

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

以上就是Python中Pandas数据合并的完整攻略。希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文搞懂Python中Pandas数据合并 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Pandas是什么?Pandas的特点与优势

    Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。目前,Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具。 Pandas 最初由 Wes M…

    2023年3月4日
    00
  • 如何在Pandas中根据条件替换列中的值

    当我们需要替换Pandas中列的值时,通常可以根据条件进行筛选,然后对筛选后的数据进行修改。 以下是使用 Pandas 在列中根据条件替换值的攻略: 步骤1:导入必要的库和数据 首先,我们需要导入Pandas库并读取一个数据集。在本示例中,我们将使用pandas内置数据集“titanic”。 import pandas as pd # 读取内置数据集 df …

    python-answer 2023年3月27日
    00
  • 如何通过日期和时间对Pandas DataFrame进行分组

    当我们在对Pandas DataFrame进行数据分析时,通常会使用分组来聚合数据,并生成汇总结果。在Pandas中,可以使用日期和时间作为分组依据,例如按照月份或者年份进行分组。以下是使用日期和时间对Pandas DataFrame进行分组的完整攻略: 示例数据集准备 首先,我们需要准备一个示例数据集,包含日期和时间列。这里我们使用Python的datet…

    python-answer 2023年3月27日
    00
  • 修改Pandas的行或列的名字(重命名)

    修改Pandas的行或列的名字,又称为重命名,是数据处理中常用的基本操作。下面是修改Pandas的行或列名字的攻略。 一、使用rename方法 Pandas的DataFrame和Series都有rename方法,可以用来重命名行或列。其中,DataFrame的rename方法可以同时重命名行和列。 语法: DataFrame.rename(mapper=No…

    python 2023年5月14日
    00
  • pandas添加自增列的2种实现方案

    针对这个话题,我来详细讲解“pandas添加自增列的2种实现方案”的完整攻略。下面将分为两个方案来进行介绍。 方案一:使用pandas的cumcount()方法 pandas提供了cumcount()方法,可以针对某一列的每一个元素来进行计数,并添加到DataFrame中。下面分步骤来看这个方法的实现: 1. 假设我们有如下的数据集: import pand…

    python 2023年5月14日
    00
  • 用Pandas的read_html()来抓取维基百科的表格

    当需要从互联网上获取数据时,网页上的表格是一个很好的数据源。而Python中的Pandas库提供了一个方便的方法来获取HTML表格。这个方法是read_html(),它可以从web页面上的table标签中提取出数据。 使用read_html()来抓取维基百科的表格有以下步骤: 1.导入所需的库 import pandas as pd 2.创建一个URL变量,…

    python-answer 2023年3月27日
    00
  • PyPDF2读取PDF文件内容保存到本地TXT实例

    我们来详细讲解“PyPDF2读取PDF文件内容保存到本地TXT实例”的完整攻略。 环境准备 在开始实例前,我们需要安装 PyPDF2 库和预训练的 PDF 文件。PyPDF2 是一个纯 Python 库,用于对 PDF 文件进行操作。 安装 PyPDF2 库: pip install PyPDF2 我们也需要一些测试用的 PDF 文件。可以在网络上下载或者自…

    python 2023年6月13日
    00
  • 如何在Pandas中改变索引值

    在Pandas中改变索引值的方式有很多种,下面是一些常见的方法: 1. 使用set_index()函数 set_index()函数可以将DataFrame中的一列或多列设置为索引,下面是一个例子: import pandas as pd # 创建一个DataFrame df = pd.DataFrame({‘a’: [1, 2, 3], ‘b’: [4, 5…

    python-answer 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部