6.3 数据拼接 (append) Pandas 数据拼接 (append) 详解 6.3 数据拼接 (append) 在 Pandas 中, 方法用于将两个或多个 DataFrame 或 Series 对象沿行方向(axis=0)进行拼接。它是一种简单直接的合并方式,特别适用于在 DataFrame 尾部追加数据。 6.3.1 基本用法 方法的基本语法如下: 参数说明: : 要追加的 DataFrame 或 Series 对象,也可以是 DataFrame 或 Series 对象的列表。 : 默认为 。如果为 ,则重置结果 DataFrame 的索引,生成新的数字索引。 : 默认为 。如果为 ,当结果 DataFrame 中存在重复索引时,会引发 异常。 : 默认为 。
在 Pandas 中,append() 方法用于将两个或多个 DataFrame 或 Series 对象沿行方向(axis=0)进行拼接。它是一种简单直接的合并方式,特别适用于在 DataFrame 尾部追加数据。
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,则在连接列时对列进行排序。
下面通过一些代码示例来演示 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 属性,否则会报错。
append() 方法会返回一个新的 DataFrame,原始 DataFrame 不会被修改。
append() 方法在循环中效率较低,因为每次调用都会创建一个新的 DataFrame。如果需要频繁追加数据,建议使用列表来收集数据,然后一次性创建 DataFrame。
从 Pandas 1.4.0 版本开始,append() 方法已被标记为 deprecated,推荐使用 concat() 方法代替。
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() 方法相同的结果,并且更加灵活。
append() 的原理和数据流可以使用 Mermaid 的 graph TD 图来简单描述 append() 的数据流:
这个图简单地展示了 append() 方法接收两个 DataFrame (A 和 B) 作为输入,然后生成一个新的 DataFrame (C) 作为输出。
更详细的数据流(考虑 ignore_index)可以表示为:
这个图更详细地描述了 append() 方法内部的处理流程:
DataFrame 1 和 DataFrame 2 被合并。
根据 ignore_index 的值,决定是否重置索引。
如果 verify_integrity=True 且存在重复索引,则抛出 ValueError 异常。
最终输出合并后的 DataFrame。
append() 方法是 Pandas 中一种简单的数据拼接方法,可以将两个或多个 DataFrame 或 Series 对象沿行方向进行拼接。虽然它使用起来很方便,但在循环中效率较低,并且已被标记为 deprecated。推荐使用 concat() 方法代替 append(),因为它更加灵活和强大。
希望本文能够帮助你理解 Pandas 中的 append() 方法,并在实际工作中灵活运用。