# 如何用Python的pandas库函数将相同结构的两张表连接为一张表

# 题目

DataFrame df1
+-------------+--------+
| Column Name | Type   |
+-------------+--------+
| student_id  | int    |
| name        | object |
| age         | int    |
+-------------+--------+

DataFrame df2
+-------------+--------+
| Column Name | Type   |
+-------------+--------+
| student_id  | int    |
| name        | object |
| age         | int    |
+-------------+--------+

编写一个解决方案,将两个 DataFrames 垂直 连接成一个 DataFrame。

结果格式如下示例所示。

示例 1:

输入:
df1
+------------+---------+-----+
| student_id | name    | age |
+------------+---------+-----+
| 1          | Mason   | 8   |
| 2          | Ava     | 6   |
| 3          | Taylor  | 15  |
| 4          | Georgia | 17  |
+------------+---------+-----+
df2
+------------+------+-----+
| student_id | name | age |
+------------+------+-----+
| 5          | Leo  | 7   |
| 6          | Alex | 7   |
+------------+------+-----+
输出:
+------------+---------+-----+
| student_id | name    | age |
+------------+---------+-----+
| 1          | Mason   | 8   |
| 2          | Ava     | 6   |
| 3          | Taylor  | 15  |
| 4          | Georgia | 17  |
| 5          | Leo     | 7   |
| 6          | Alex    | 7   |
+------------+---------+-----+
解释:
两个 DataFrame 被垂直堆叠,它们的行被合并。

# 解题方案

# 1、审题,理解题意

题目的意思是有两个DataFrame,且有相同的列结构 student_id,name 和 age。想要垂直地连接两个 DataFrame,df1 和 df2。可以使用pandas 内部的一个方便的函数pd.concat()垂直(按行)或水平(按列)连接 DataFrame。

# pd.concat()函数参数
  • objs 参数是一个要串联的 Series 或 DataFrame 对象的序列或映射。
  • axis 参数决定连接的方向: axis=0 设置为缺省值,这意味着它将垂直(按行)连接 DataFrame。 axis=1 将水平连接 DataFrame(按列)。

# 2、解题思路

对于该题目我们用pd.concat()函数垂直连接 DataFrame,需要确保列的顺序一致。

return pd.concat([df1, df2], axis=0)
  • 我们利用 pd.concat() 函数来连接 DataFrames。因为我们连接了 df1 和 df2,所以我们传递列表 [df1,df2] 作为 objs 的第一个参数;
  • 由于我们垂直连接,所以我们设置 axis=0。

# 3、代码实现

import pandas as pd

def concatenateTables(df1: pd.DataFrame, df2: pd.DataFrame) -> pd.DataFrame:
    return pd.concat([df1, df2], axis=0)

# 4、执行结果

image-20231025111256972

更新时间: 2023/10/29 02:21:09