Python – 如何将两个或多个 Pandas DataFrames 沿着行连接?

Python – 如何将两个或多个 Pandas DataFrames 沿着行连接?

Pandas 是 Python 中非常流行的数据分析库。Pandas 提供了很多功能,其中之一就是将两个或多个 DataFrames 沿着行连接起来,形成一个更大的 DataFrame。这个操作在数据集因为大小限制而需要分块读取的情况下非常有用。本篇文章将讲解如何使用 Pandas 将两个或多个 DataFrames 沿着行连接。

更多Pandas相关文章,请阅读:Pandas 教程

什么是 Pandas DataFrame?

在本篇文章中,我们使用 Pandas DataFrame。Pandas DataFrame 是 Pandas 中用于表示二维数据的数据结构。DataFrame 可以有行标签和列标签,其数据类型可以是整数、字符串、浮点数、布尔值等。

我们可以使用 Pandas 将数据从多种格式读出到 DataFrame 中。例如,可以将 CSV 文件、Excel 文件、SQL 数据库、JSON 文件等读入到 DataFrame 中。

以下是一个示例 DataFrame,表示一些人的年龄和身高:

import pandas as pd

data = {
  'age': [25, 35, 20, 28],
  'height': [170.5, 180.3, 165.2, 175.1]
}

df = pd.DataFrame(data)
print(df)

输出:

   age  height
0   25   170.5
1   35   180.3
2   20   165.2
3   28   175.1

如何将两个 DataFrames 沿着行连接?

我们可以使用 Pandas 中的 concat 函数将两个或多个 DataFrames 沿着行连接。concat 函数接受一个列表或元组作为参数,其中包含要连接的 DataFrame。以下是将两个 DataFrame 沿着行连接的示例:

import pandas as pd

data1 = {
  'age': [25, 35],
  'height': [170.5, 180.3]
}

data2 = {
  'age': [20, 28],
  'height': [165.2, 175.1]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

df = pd.concat([df1, df2])
print(df)

输出:

   age  height
0   25   170.5
1   35   180.3
0   20   165.2
1   28   175.1

在这个例子中,我们定义了两个 DataFrame,df1df2,每个 DataFrame 包含两行数据。我们然后使用 concat 函数将这两个 DataFrame 沿着行连接起来,得到一个新的 DataFrame dfdf 包含四行数据,其中前两行来自 df1,后两行来自 df2

请注意,输入 concat 函数的参数是一个列表,其中包含要连接的 DataFrame。如果要连接的 DataFrame 较多,可以将这些 DataFrame 放入元组中来传递参数。

如何在连接时保留原始索引?

在上面的示例中,每个 DataFrame 都有从 0 开始的行号,但这并不是我们想要的。我们想要在连接时保留每个 DataFrame 的原始索引。为此,我们可以将 concat 函数的 ignore_index 参数设置为 True。以下代码演示了如何在连接时保留原始索引:

import pandas as pd

data1 = {
  'age': [25, 35],
  'height': [170.5, 180.3]
}

data2 = {
  'age': [20, 28],
  'height': [165.2, 175.1]
}

df1 = pd.DataFrame(data1, index=['a', 'b'])
df2 = pd.DataFrame(data2, index=['c', 'd'])

df = pd.concat([df1, df2], ignore_index=True)
print(df)

输出:

   age  heighta   25   170.5
b   35   180.3
c   20   165.2
d   28   175.1

在这个例子中,我们定义了两个 DataFrame,df1df2,每个 DataFrame 包含两行数据。我们使用 index 参数来定义每个 DataFrame 的行索引。

我们将 concat 函数的 ignore_index 参数设置为 True,这样 Pandas 就会在新 DataFrame 中重新生成行号,而不是使用原始的行号。在输出中可以看到,新 DataFrame df 包含了原始 DataFrame 的行索引,行索引来自原始 DataFrame 的索引 abcd

如何在连接时指定连接方向?

到目前为止,我们都是沿着行连接 DataFrame 的。但是,我们也可以沿着列连接 DataFrame。我们可以使用 concat 函数的 axis 参数来指定是沿着行连接还是沿着列连接。

以下代码演示了如何沿着列连接两个 DataFrame:

import pandas as pd

data1 = {
  'age': [25, 35],
}

data2 = {
  'height': [170.5, 180.3],
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

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

输出:

   age  height
0   25   170.5
1   35   180.3

在这个例子中,我们定义了两个 DataFrame,df1df2,其中一个 DataFrame 包含了年龄信息,另一个 DataFrame 包含了身高信息。我们使用 concat 函数的 axis 参数将这两个 DataFrame 沿着列连接起来,得到 New DataFrame df

如何在连接时处理重复列?

在连接两个 DataFrame 时,有可能会出现列名称重复的情况。在这种情况下,concat 函数会将所有重复列都保留在输出的 DataFrame 中。

以下是一个示例,演示了在连接两个 DataFrame 时处理重复列的方法:

import pandas as pd

data1 = {
  'age': [25, 35],
  'height': [170.5, 180.3]
}

data2 = {
  'age': [20, 28],
  'height': [165.2, 175.1]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

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

输出:

   age  height  age  height
0   25   170.5   20   165.2
1   35   180.3   28   175.1

在这个例子中,我们定义了两个 DataFrame,df1df2。这两个 DataFrame 其中有重复的列名,即 ageheight。我们使用 concat 函数将两个 DataFrame 沿着列连接起来,得到一个新 DataFrame df

你可以看到,在 df 中,有两列名称为 age 和两列名称为 height

但是,如果你确实有重复的列,但想要只保留其中一列,可以使用 DataFrame.drop 方法将多余的列删除。以下是如何删除某个 DataFrame 中的列的示例:

df = df.drop(['height'], axis=1)
print(df)

输出:

   age  age
0   25   20
1   35   28

在这个例子中,我们使用 drop 方法删除了重复的 height 列,这样得到的 DataFrame 只包含 age 列。

结论

在本篇文章中,我们学习了如何使用 Pandas 将两个或多个 DataFrames 沿着行连接。我们也学习了如何保留原始索引、指定连接方向以及处理列名重复的情况。连接 DataFrame 是在数据分析和处理中常用的操作,它可以使我们更方便地组合和处理不同的数据集。

希望这篇文章能帮助你更好地了解如何在 Python 中使用 Pandas 将 DataFrames 沿着行连接。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程