3.4.1 数据的合并操作
3.4.1.1 使用concat()数据合并
在数据分析中,经常需要将多个数据集进行合并。Pandas 提供了一个强大的工具——pd.concat(),用来连接两个或多个 DataFrame。这种合并操作可以是垂直合并(行合并)或水平合并(列合并)。此外,concat() 还提供了许多选项,帮助我们定制合并行为。
df1 = pd.DataFrame(np.random.randint(1, 10, (3, 4)), index=[1, 2, 3], columns=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame(np.random.randint(1, 10, (3, 4)), index=[2, 3, 4], columns=['B', 'C', 'D', 'E'])
- 垂直合并:按行拼接
当希望将多个 DataFrame 垂直堆叠(即按行合并)时,可以使用 pd.concat(),其默认的合并方式是沿着 axis=0(即按行)。假设有两个 DataFrame df1 和 df2,我们可以通过以下方式进行垂直合并:
# 垂直合并
result = pd.concat([df1, df2])
print(result)
输出:
# 结果不难发现对应的列索引会对齐,空缺的由NaN补齐
A B C D E
1 8.0 9 3 6 NaN
2 9.0 7 6 3 NaN
3 5.0 5 1 1 NaN
2 NaN 5 9 4 6.0
3 NaN 9 7 2 5.0
4 NaN 4 7 9 4.0
注意,合并后,df1 和 df2 的行索引是保留的。我们也可以通过设置 ignore_index=True 来重置行索引:
result = pd.concat([df1, df2], ignore_index=True)
print(result)
输出:
A B C D E
0 8.0 9 3 6 NaN
1 9.0 7 6 3 NaN
2 5.0 5 1 1 NaN
3 NaN 5 9 4 6.0
4 NaN 9 7 2 5.0
5 NaN 4 7 9 4.0
- 水平合并:按列拼接
除了按行合并,我们还可以选择按列(axis=1)进行合并,即水平合并。这适用于当两个 DataFrame 具有相同的索引时,我们希望将它们的列进行拼接。例如:
result = pd.concat([df1, df2], axis=1)
print(result)
输出:
# 结果不难发现对应的行索引会对齐,空缺的由NaN补齐
A B C D B C D E
1 8.0 9.0 3.0 6.0 NaN NaN NaN NaN
2 9.0 7.0 6.0 3.0 5.0 9.0 4.0 6.0
3 5.0 5.0 1.0 1.0 9.0 7.0 2.0 5.0
4 NaN NaN NaN NaN 4.0 7.0 9.0 4.0
- 使用多层次索引
pd.concat() 还允许为合并的数据设置多层次索引,这对于标识数据来源非常有用。通过 keys 参数,我们可以为每个 DataFrame 指定一个标签,这样合并后的数据将包含这些标签作为层次索引。
按行合并时使用多层次索引
result = pd.concat([df1, df2], keys=['AA', 'BB'])
print

最低0.47元/天 解锁文章
12万+

被折叠的 条评论
为什么被折叠?



