Python ŌĆō 合并两个 Pandas DataFrame
在数据处理和分析中,经常需要进行数据合并操作。Pandas 是 Python 中非常常用的数据处理库,提供了丰富的数据处理和操作功能。在 Pandas 中,合并(merge)两个 DataFrame 是常用的操作。本文将介绍如何使用 Pandas 合并两个 DataFrame。
更多Pandas相关文章,请阅读:Pandas 教程
Pandas DataFram 介绍
Pandas 是 Python 中非常常用的数据处理库。Pandas 提供了两种主要的数据结构,Series 和 DataFrame。其中,DataFrame 可以看作是一个表格,一般有行和列两个维度。DataFrame 的每一列可以有自己的数据类型(例如整数、浮点数、字符串等),但不同列的数据类型需要相同。
下面是一个简单的示例,我们可以使用 Pandas 创建一个 DataFrame。首先,我们需要导入 Pandas 库:
import pandas as pd
然后,我们可以使用 Pandas 的 DataFrame 方法创建一个 DataFrame:
# 创建一个 DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob'], 'age': [25, 30]})
上述代码中,我们先创建了一个字典,字典的 key 为列名,value 为该列的数据。然后,我们使用 DataFrame 方法将字典转换为 DataFrame。例如,上述代码中,name 和 age 就是 DataFrame 的两个列。
Pandas DataFrame 合并
在实际的数据处理中,我们需要经常合并两个或多个 DataFrame。Pandas 提供了三种合并 DataFrame 的方式,分别是 concat、merge 和 join。这里我们重点介绍 merge。
当我们对两个 DataFrame 进行合并时,需要指定合并的列,如果两个 DataFrame 的某个列值相同,该行才会被合并。如果两个 DataFrame 合并的列名不同,则需要使用 left_on 和 right_on 参数指定。
以下是一个简单的示例代码,合并两个 DataFrame:
# 创建两个 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B'], 'value': [4, 5]})
# 合并两个 DataFrame
df_merge = pd.merge(df1, df2, on='key')
# 打印合并结果
print(df_merge)
code language: python
上述代码中,我们创建了两个 DataFrame,一个包括三个键值对,另一个包括两个键值对。然后,我们对这两个 DataFrame 进行 merge 操作,合并的键值为 key,打印合并结果。
运行上述代码,结果如下:
key value_x value_y
0 A 1 4
1 B 2 5
我们可以看到合并结果包括三列,其中 key 列是合并的键值,value_x 和 value_y 分别表示两个 DataFrame 的 value 列。
合并方式
merge 提供了几种合并方式,常用的有 inner、left、right 和 outer 四种。
- inner:取两个 DataFrame 合并列的交集,只保留交集部分。
- left:以左边 DataFrame 的合并列为基准,保留左边 DataFrame 的所有行,右边 DataFrame 中没有的数据位置用空值填充。
- right:以右边 DataFrame 的合并列为基准,保留右边 DataFrame 的所有行,左边 DataFrame 中没有的数据位置用空值填充。
- outer:取两个 DataFrame 合并列的并集,保留所有数据,数据位置没有对应值时用空值填充。
默认情况下,merge 使用 inner 合并方式。我们可以使用 how 参数指定合并方式。以下是一个简单的示例代码:
# 创建两个 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value: [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})
# 使用不同的合并方式
df_inner = pd.merge(df1, df2, on='key')
df_left = pd.merge(df1, df2, on='key', how='left')
df_right = pd.merge(df1, df2, on='key', how='right')
df_outer = pd.merge(df1, df2, on='key', how='outer')
# 打印合并结果
print("Inner Merge:")
print(df_inner)
print("Left Merge:")
print(df_left)
print("Right Merge:")
print(df_right)
print("Outer Merge:")
print(df_outer)
code language: python
上述代码中,我们首先创建两个 DataFrame,然后针对这两个 DataFrame 使用了不同的合并方式。最后分别打印了合并结果。
输出结果如下:
Inner Merge:
key value_x value_y
0 A 1 4
1 B 2 5
Left Merge:
key value_x value_y
0 A 1 4.0
1 B 2 5.0
2 C 3 NaN
Right Merge:
key value_x value_y
0 A 1.0 4
1 B 2.0 5
2 D NaN 6
Outer Merge:
key value_x value_y
0 A 1.0 4.0
1 B 2.0 5.0
2 C 3.0 NaN
3 D NaN 6.0
我们可以看到,不同的合并方式得到的结果是不同的。Inner Merge 只保留了两个 DataFrame 的交集部分,Left Merge 以 df1 为基准,保留了 df1 的所有行;Right Merge 以 df2 为基准,保留了 df2 的所有行;Outer Merge 取两个 DataFrame 的并集,保留了所有数据。
指定多个合并列
有时候,我们需要指定多个合并列。例如,如果一个 DataFrame 包含了城市、州、国家的信息,而另一个 DataFrame 只包含了城市、国家的信息。那么我们可以使用多个列做为合并列。
以下是一个简单的示例代码,演示如何指定多个合并列:
# 创建两个 DataFrame
df1 = pd.DataFrame({'city': ['New York', 'Los Angeles', 'Chicago'],
'state': ['NY', 'CA', 'IL'],
'country': ['USA', 'USA', 'USA'],
'value': [1, 2, 3]})
df2 = pd.DataFrame({'city': ['New York', 'Los Angeles', 'Chicago'],
'country': ['USA', 'USA', 'USA'],
'value': [4, 5, 6]})
# 指定多个合并列
df_merge = pd.merge(df1, df2, on=['city', 'country'])
# 打印合并结果
print(df_merge)
code language: python
上述代码中,我们创建了两个 DataFrame,其中 df1 包含城市、州、国家的信息;df2 只包含城市、国家的信息。然后我们指定城市和国家两列作为合并列,使用 merge 进行合并,并打印合并结果。
输出结果如下:
city state country value_x value_y
0 New York NY USA 1 4
1 Los Angeles CA USA 2 5
2 Chicago IL USA 3 6
我们可以看到,合并结果的 city 和 country 列是合并的两个列,其他列则是 df1 和 df2 的 value 列。
总结
本文介绍了 Pandas 中对两个 DataFrame 进行合并的操作。我们学习了如何使用 merge 方法进行 DataFrame 的合并,并了解了不同的合并方式和指定多个合并列的操作。在实际的数据处理和分析中,DataFrame 的合并是非常常见的操作,掌握 Pandas 中的合并操作可以大大提升数据处理和分析的效率。