通过匹配ID号合并两个 Pandas 数据框可以使用 Pandas 库的 merge() 函数。下面是完整的攻略步骤:
- 读入两个数据框,分别名为 df1 和 df2,两个数据框中都包含一个 ID 列。
import pandas as pd
df1 = pd.read_csv('data1.csv')
df2 = pd.read_csv('data2.csv')
- 确认两个数据框中的 ID 列以及需要合并的列(例如值列)的数据类型一致。如果不一致,需要进行类型转换。
df1['ID'] = df1['ID'].astype(str)
df2['ID'] = df2['ID'].astype(str)
- 基于 ID 列对两个数据框进行合并,使用 merge() 函数实现。
merged_df = pd.merge(df1, df2, on='ID')
其中,on 参数指定了基于哪一列进行合并。
- 可选地,可以指定合并方式和合并列的名称等。
# 指定合并方式为 outer
merged_df = pd.merge(df1, df2, on='ID', how='outer')
# 指定合并列名称
merged_df = pd.merge(df1, df2, on='ID', suffixes=('_left', '_right'))
以上就是通过匹配的 ID 号合并两个 Pandas 数据框的完整攻略。下面通过实例说明,更加详细地说明整个过程。
例如,我们有两个数据框 df1 和 df2,它们分别包含学生的 ID 和年龄信息:
# df1
ID Age
0 001 18
1 002 19
2 003 20
3 004 21
# df2
ID Age
0 002 20
1 003 21
2 005 19
3 007 22
现在我们需要将两个数据框合并为一个,包含所有学生的信息。基于 ID 列进行合并,代码如下:
merged_df = pd.merge(df1, df2, on='ID')
结果如下:
ID Age_x Age_y
0 002 19 20
1 003 20 21
可以看到,合并后的数据框只包含 ID 列中重复的学生信息,并自动将两个数据框中的 Age 列区分为 Age_x 和 Age_y 列。
如果希望包含所有学生的信息,即使某些学生的信息在某个数据框中不存在,可以使用 outer 合并方式:
merged_df = pd.merge(df1, df2, on='ID', how='outer')
结果如下:
ID Age_x Age_y
0 001 18.0 NaN
1 002 19.0 20.0
2 003 20.0 21.0
3 004 21.0 NaN
4 005 NaN 19.0
5 007 NaN 22.0
可以看到,合并后的数据框包含所有学生的信息,即使某些学生的信息在某个数据框中不存在,也会自动填充为 NaN。此时,如果希望将 Age_x 和 Age_y 列合并为一个 Age 列,并删除重复的 ID 列,可以使用如下代码:
merged_df = pd.merge(df1, df2, on='ID', how='outer')
merged_df['Age'] = merged_df[['Age_x', 'Age_y']].fillna(0).sum(axis=1)
merged_df.drop(['Age_x', 'Age_y'], axis=1, inplace=True)
最终结果如下:
ID Age
0 001 18.0
1 002 39.0
2 003 41.0
3 004 21.0
4 005 19.0
5 007 22.0
可以看到,合并后的数据框包含了所有学生的信息,并将 Age_x 和 Age_y 合并为了一个 Age 列,并删除了重复的 ID 列。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过匹配的ID号合并两个Pandas数据框 - Python技术站