博客
关于我
Python数据分析入门(十一):数据合并
阅读量:633 次
发布时间:2019-03-14

本文共 2189 字,大约阅读时间需要 7 分钟。

数据合并(pd.merge)和数据拼接(pd.concat)是数据分析中常用的操作。它们各有特色,适用于不同的场景。以下是对这两个函数的详细说明以及使用示例。

一、数据合并(pd.merge)

1. 工作原理

pd.merge函数用于将两个或多个DataFrame按键值连接起来。这个函数类似于数据库中的JOIN操作。主要参数包括:

  • left、right:指定要合并的两个DataFrame。
  • how:指定合并的方式,默认为'inner',即保留交集。
  • on、left_on、right_on:指定连接的键。如果不指定,函数会自动查找交集的列名。
  • suffixes:指定重复列名时的后缀,避免冲突。默认是'_left'和'_right'。

2. 示例

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)

3. 合并方式

  • 内连接(默认):保留所有在左右数据框都存在的键的交集。
  • 外连接:保留所有在左右数据框中至少存在一个键的记录。
  • 左外连接:保留左数据框的全部键,右边补充未匹配的记录。
  • 右外连接:保留右数据框的全部键,左边补充未匹配的记录。
# 外连接示例result = pd.merge(left, right, how='outer', on=['key1', 'key2'])print(result)

4. 处理重复列名

为了避免列名冲突,可以使用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)

1. 工作原理

pd.concat函数用于沿轴方向将多个数据集合并到一个新的数据集。如果沿着行(轴=0)合并,会将两个数据集的行拼接;如果沿着列(轴=1)合并,会将两个数据集的列拼接。

2. 示例

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)

3. 合并方式

  • 轴=0:默认行为,沿行合并。
  • 轴=1:沿列合并。
  • join:指定连接方式,默认为'outer'。
  • 其它参数:如level用于处理索引层次结构,fileparse用于处理文件对象。

4. 示例

# 按列合并,并保留所有键result = pd.concat([df1, df2], axis=1, join='inner')print(result)

三、其他使用技巧

  • 按索引连接:可以使用left_index=Trueright_index=True结合on参数来按索引作为键。

    # 按索引连接result = pd.concat([df1, df2], left_index=True, right_index=True)print(result)
  • 自动名称处理:如果有多个数据集需要合并,自动处理列名冲突,确保数据不丢失。

四、总结

  • pd.merge适用于合并不同的数据集,根据键值连接。
  • pd.concat适用于拼接数据集,沿轴方向合并数据。

两者都是强大的工具,选择时需根据需求和数据结构来决定。

转载地址:http://zysoz.baihongyu.com/

你可能感兴趣的文章
Oracle-定时任务-JOB
查看>>
oracle.dataaccess 连接池,asp.net使用Oracle.DataAccess.dll连接Oracle
查看>>
oracle00205报错,Oracle控制文件损坏报错场景
查看>>
Oracle10g EM乱码之快速解决
查看>>
Oracle10g下载地址--多平台下的32位和64位
查看>>
Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
查看>>
oracle11g dataguard物理备库搭建(关闭主库cp数据文件到备库)
查看>>
Oracle11G基本操作
查看>>
Oracle11g服务详细介绍及哪些服务是必须开启的?
查看>>
Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
查看>>
oracle12安装软件后安装数据库,然后需要自己配置监听
查看>>
Oracle——08PL/SQL简介,基本程序结构和语句
查看>>
Oracle——distinct的用法
查看>>
Oracle、MySQL、SQL Server架构大对比
查看>>
oracle下的OVER(PARTITION BY)函数介绍
查看>>
Oracle中DATE数据相减问题
查看>>
Oracle中merge into的使用
查看>>
oracle中sql查询上月、本月、上周、本周、昨天、今天的数据!
查看>>
oracle中sql的case语句运用--根据不同条件去排序!
查看>>
Oracle中Transate函数的使用
查看>>