本文共 2189 字,大约阅读时间需要 7 分钟。
数据合并(pd.merge)和数据拼接(pd.concat)是数据分析中常用的操作。它们各有特色,适用于不同的场景。以下是对这两个函数的详细说明以及使用示例。
pd.merge函数用于将两个或多个DataFrame按键值连接起来。这个函数类似于数据库中的JOIN操作。主要参数包括:
import pandas as pd# 创建两个DataFrameleft = pd.DataFrame({ 'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']})right = pd.DataFrame({ 'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']})# 默认内连接result = pd.merge(left, right, on=['key1', 'key2'])print(result)
# 外连接示例result = pd.merge(left, right, how='outer', on=['key1', 'key2'])print(result)
为了避免列名冲突,可以使用suffixes参数指定后缀。
# 重复列名处理df_obj1 = pd.DataFrame({ 'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data': np.random.randint(0, 10, 7)})df_obj2 = pd.DataFrame({ 'key': ['a', 'b', 'd'], 'data': np.random.randint(0, 10, 3)})# 重新命名result = pd.merge(df_obj1, df_obj2, on='key', suffixes=('_left', '_right'))print(result)
pd.concat函数用于沿轴方向将多个数据集合并到一个新的数据集。如果沿着行(轴=0)合并,会将两个数据集的行拼接;如果沿着列(轴=1)合并,会将两个数据集的列拼接。
import pandas as pdimport numpy as np# 创建两个DataFramedf1 = pd.DataFrame(np.arange(6).reshape(3, 2), index=['a', 'b', 'c'], columns=['one', 'two'])df2 = pd.DataFrame(np.arange(4).reshape(2, 2) + 5, index=['a', 'c'], columns=['three', 'four'])# 按默认行为(外连接,轴=0)result = pd.concat([df1, df2])print(result)
level
用于处理索引层次结构,fileparse
用于处理文件对象。# 按列合并,并保留所有键result = pd.concat([df1, df2], axis=1, join='inner')print(result)
按索引连接:可以使用left_index=True
或right_index=True
结合on
参数来按索引作为键。
# 按索引连接result = pd.concat([df1, df2], left_index=True, right_index=True)print(result)
自动名称处理:如果有多个数据集需要合并,自动处理列名冲突,确保数据不丢失。
两者都是强大的工具,选择时需根据需求和数据结构来决定。
转载地址:http://zysoz.baihongyu.com/