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,df1
和 df2
,每个 DataFrame 包含两行数据。我们然后使用 concat
函数将这两个 DataFrame 沿着行连接起来,得到一个新的 DataFrame df
。df
包含四行数据,其中前两行来自 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,df1
和 df2
,每个 DataFrame 包含两行数据。我们使用 index
参数来定义每个 DataFrame 的行索引。
我们将 concat
函数的 ignore_index
参数设置为 True,这样 Pandas 就会在新 DataFrame 中重新生成行号,而不是使用原始的行号。在输出中可以看到,新 DataFrame df
包含了原始 DataFrame 的行索引,行索引来自原始 DataFrame 的索引 a
、b
、c
和 d
。
如何在连接时指定连接方向?
到目前为止,我们都是沿着行连接 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,df1
和 df2
,其中一个 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,df1
和 df2
。这两个 DataFrame 其中有重复的列名,即 age
和 height
。我们使用 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 沿着行连接。