📜  合并两个 df - Python (1)

📅  最后修改于: 2023-12-03 15:22:57.565000             🧑  作者: Mango

合并两个DataFrame

在数据分析中,我们经常需要将两个数据集合并成一个,方便后续的操作。Python提供了多种合并DataFrame的方式,这篇文章将介绍其中的两种:merge和concat。

merge

merge是按照一定的条件将两个DataFrame合并成一个。比如有两个DataFrame,分别是A和B,它们都有一个共同的列'key',那么我们可以按照'key'这一列将两个DataFrame合并成一个。

import pandas as pd

df_a = pd.DataFrame({'key':['a', 'b', 'c', 'd'], 'value_a': [1, 2, 3, 4]})
df_b = pd.DataFrame({'key':['c', 'd', 'e', 'f'], 'value_b': [5, 6, 7, 8]})

merged_df = pd.merge(df_a, df_b, on='key')
print(merged_df)

输出结果如下:

| | key | value_a | value_b | |---|-----|---------|---------| | 0 | c | 3 | 5 | | 1 | d | 4 | 6 |

可以看到,合并后的DataFrame只保留了A和B中都有的'c'和'd'这两行,并将'value_a'和'value_b'两列合并到了一起。

当然,我们也可以按照多列进行合并:

merged_df = pd.merge(df_a, df_b, on=['key'], how='outer')
print(merged_df)

输出结果如下:

| | key | value_a | value_b | |----|-------|---------|---------| | 0 | a | 1 | NaN | | 1 | b | 2 | NaN | | 2 | c | 3 | 5 | | 3 | d | 4 | 6 | | 4 | e | NaN | 7 | | 5 | f | NaN | 8 |

'how'参数默认为'inner',表示只保留两个DataFrame都有的行;若将'how'设为'outer',则会保留所有行,没有对应的元素使用NaN填充。

更多关于merge的介绍可以阅读pandas文档.

concat

concat是把多个数据集按照某个方向(横向或纵向)拼接在一起。比如,我们有两个DataFrame:

import pandas as pd

df_a = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']})
df_b = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'], 'B': ['B4', 'B5', 'B6', 'B7'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', 'D6', 'D7']})

我们可以使用concat将它们竖着拼在一起:

concat_df = pd.concat([df_a, df_b], axis=0)
print(concat_df)

输出结果如下:

| | A | B | C | D | |----|-----|-----|-----|-----| | 0 | A0 | B0 | C0 | D0 | | 1 | A1 | B1 | C1 | D1 | | 2 | A2 | B2 | C2 | D2 | | 3 | A3 | B3 | C3 | D3 | | 0 | A4 | B4 | C4 | D4 | | 1 | A5 | B5 | C5 | D5 | | 2 | A6 | B6 | C6 | D6 | | 3 | A7 | B7 | C7 | D7 |

如果我们需要横向拼接则需要将axis参数设为1:

concat_df = pd.concat([df_a, df_b], axis=1)
print(concat_df)

输出结果如下:

| | A | B | C | D | A | B | C | D | |----|-----|-----|-----|-----|-----|-----|-----|-----| | 0 | A0 | B0 | C0 | D0 | A4 | B4 | C4 | D4 | | 1 | A1 | B1 | C1 | D1 | A5 | B5 | C5 | D5 | | 2 | A2 | B2 | C2 | D2 | A6 | B6 | C6 | D6 | | 3 | A3 | B3 | C3 | D3 | A7 | B7 | C7 | D7 |

更多关于concat的介绍可以阅读pandas文档.