6.3 数据拼接 (append)


文档摘要

6.3 数据拼接 (append) Pandas 数据拼接 (append) 详解 6.3 数据拼接 (append) 在 Pandas 中, 方法用于将两个或多个 DataFrame 或 Series 对象沿行方向(axis=0)进行拼接。它是一种简单直接的合并方式,特别适用于在 DataFrame 尾部追加数据。 6.3.1 基本用法 方法的基本语法如下: 参数说明: : 要追加的 DataFrame 或 Series 对象,也可以是 DataFrame 或 Series 对象的列表。 : 默认为 。如果为 ,则重置结果 DataFrame 的索引,生成新的数字索引。 : 默认为 。如果为 ,当结果 DataFrame 中存在重复索引时,会引发 异常。 : 默认为 。

6.3 数据拼接 (append)

Pandas 数据拼接 (append) 详解

6.3 数据拼接 (append)

在 Pandas 中,append() 方法用于将两个或多个 DataFrame 或 Series 对象沿行方向(axis=0)进行拼接。它是一种简单直接的合并方式,特别适用于在 DataFrame 尾部追加数据。

6.3.1 基本用法

append() 方法的基本语法如下:

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

参数说明:

  • other: 要追加的 DataFrame 或 Series 对象,也可以是 DataFrame 或 Series 对象的列表。

  • ignore_index: 默认为 False。如果为 True,则重置结果 DataFrame 的索引,生成新的数字索引。

  • verify_integrity: 默认为 False。如果为 True,当结果 DataFrame 中存在重复索引时,会引发 ValueError 异常。

  • sort: 默认为 False。如果为 True,则在连接列时对列进行排序。

6.3.2 代码实践

下面通过一些代码示例来演示 append() 方法的使用。

示例 1:追加单个 DataFrame

import pandas as pd # 创建两个 DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]}) # 使用 append() 方法将 df2 追加到 df1 df3 = df1.append(df2) print(df3)

输出结果:

A B 0 1 4 1 2 5 2 3 6 0 7 10 1 8 11 2 9 12

可以看到,df2 被直接追加到了 df1 的尾部。注意,索引没有重置,df2 的索引被保留了下来。

示例 2:追加多个 DataFrame

import pandas as pd # 创建三个 DataFrame df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]}) df3 = pd.DataFrame({'A': [9, 10], 'B': [11, 12]}) # 使用 append() 方法追加多个 DataFrame df4 = df1.append([df2, df3]) print(df4)

输出结果:

A B 0 1 3 1 2 4 0 5 7 1 6 8 0 9 11 1 10 12

这里,我们将多个 DataFrame 放入一个列表中,然后传递给 append() 方法。

示例 3:重置索引

import pandas as pd # 创建两个 DataFrame df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]}) # 使用 append() 方法并重置索引 df3 = df1.append(df2, ignore_index=True) print(df3)

输出结果:

A B 0 1 3 1 2 4 2 5 7 3 6 8

通过设置 ignore_index=True,我们得到了一个新的数字索引。

示例 4:处理列名不同的情况

import pandas as pd # 创建两个 DataFrame,列名不同 df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]}) # 使用 append() 方法 df3 = df1.append(df2, ignore_index=True, sort=True) print(df3)

输出结果:

A B C D 0 1.0 3.0 NaN NaN 1 2.0 4.0 NaN NaN 2 NaN NaN 5.0 7.0 3 NaN NaN 6.0 8.0

当列名不同时,append() 方法会将所有列都包含在结果 DataFrame 中,缺失值用 NaN 填充。设置 sort=True 可以按照列名进行排序。

示例 5:追加 Series

import pandas as pd # 创建一个 DataFrame 和一个 Series df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) s1 = pd.Series([5, 6], name='C') # 使用 append() 方法追加 Series df2 = df1.append(s1, ignore_index=True) print(df2)

输出结果:

A B C 0 1.0 3.0 NaN 1 2.0 4.0 NaN 2 NaN NaN 5.0 3 NaN NaN 6.0

注意,追加 Series 时,需要指定 Series 的 name 属性,否则会报错。

6.3.3 注意事项

  • append() 方法会返回一个新的 DataFrame,原始 DataFrame 不会被修改。

  • append() 方法在循环中效率较低,因为每次调用都会创建一个新的 DataFrame。如果需要频繁追加数据,建议使用列表来收集数据,然后一次性创建 DataFrame。

  • 从 Pandas 1.4.0 版本开始,append() 方法已被标记为 deprecated,推荐使用 concat() 方法代替。

6.3.4 concat() 方法替代 append()

concat() 方法是 Pandas 中更强大、更灵活的合并方法。它可以沿任意轴进行合并,并且可以处理更复杂的合并场景。

下面是使用 concat() 方法实现与 append() 相同功能的示例:

import pandas as pd # 创建两个 DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]}) # 使用 concat() 方法将 df2 追加到 df1 df3 = pd.concat([df1, df2], ignore_index=True) print(df3)

输出结果:

A B 0 1 4 1 2 5 2 3 6 3 7 10 4 8 11 5 9 12

可以看到,使用 concat() 方法可以得到与 append() 方法相同的结果,并且更加灵活。

6.3.5 append() 的原理和数据流

可以使用 Mermaid 的 graph TD 图来简单描述 append() 的数据流:

这个图简单地展示了 append() 方法接收两个 DataFrame (A 和 B) 作为输入,然后生成一个新的 DataFrame (C) 作为输出。

更详细的数据流(考虑 ignore_index)可以表示为:

这个图更详细地描述了 append() 方法内部的处理流程:

  1. DataFrame 1 和 DataFrame 2 被合并。

  2. 根据 ignore_index 的值,决定是否重置索引。

  3. 如果 verify_integrity=True 且存在重复索引,则抛出 ValueError 异常。

  4. 最终输出合并后的 DataFrame。

6.3.6 总结

append() 方法是 Pandas 中一种简单的数据拼接方法,可以将两个或多个 DataFrame 或 Series 对象沿行方向进行拼接。虽然它使用起来很方便,但在循环中效率较低,并且已被标记为 deprecated。推荐使用 concat() 方法代替 append(),因为它更加灵活和强大。

希望本文能够帮助你理解 Pandas 中的 append() 方法,并在实际工作中灵活运用。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U