0

0

Pandas pd.concat 合并策略:处理日期时间列的进阶指南

花韻仙語

花韻仙語

发布时间:2025-10-10 13:05:47

|

530人浏览过

|

来源于php中文网

原创

Pandas pd.concat 合并策略:处理日期时间列的进阶指南

本教程详细阐述了如何利用 Pandas 的 pd.concat 函数,结合 set_index 和 reset_index 方法,高效地合并基于日期时间列的 DataFrame。它提供了一种替代 pd.merge 的灵活策略,特别适用于需要将共享索引的多个 DataFrame 横向连接的场景,确保数据整合的准确性和效率。

1. 理解 pd.concat 与 pd.merge 的选择

在 pandas 中,pd.merge 和 pd.concat 都是用于组合 dataframe 的强大工具,但它们的设计理念和应用场景有所不同。

  • pd.merge: 主要用于执行数据库风格的连接操作(如内连接、左连接、右连接、外连接),它通过指定一个或多个键列(on, left_on, right_on)来匹配两个 DataFrame 中的行。当需要基于列值进行复杂匹配时,pd.merge 是首选。
  • pd.concat: 主要用于沿着某个轴(行或列)堆叠或连接 DataFrame。当 axis=0 时,它将 DataFrame 堆叠起来(行连接);当 axis=1 时,它将 DataFrame 横向连接(列连接),此时它会尝试根据它们的索引进行对齐。

有时,出于性能、内存管理或特定数据处理逻辑的考虑,我们可能希望使用 pd.concat 来实现类似 pd.merge 的功能,尤其是在合并基于日期时间等精确匹配的列时。通过将合并键设置为 DataFrame 的索引,pd.concat 可以在索引级别进行高效对齐。

2. 核心策略:基于索引的横向合并

当使用 pd.concat 进行横向合并(axis=1)时,其核心思想是将作为合并键的列提升为 DataFrame 的索引。这样,pd.concat 就能利用索引的高效查找机制来对齐数据。这个过程通常包含三个关键步骤:

  1. set_index(): 将用于合并的列设置为 DataFrame 的索引。
  2. pd.concat(..., axis=1, join='inner'): 对已设置索引的 DataFrame 列表执行横向连接。join='inner' 参数确保只保留所有 DataFrame 中索引共同存在的部分,这等同于 pd.merge 的内连接。
  3. reset_index(): 合并完成后,将索引重新转换回普通的列,以便后续处理或保存。

3. 示例:使用 pd.concat 合并日期时间 DataFrame

假设我们有三个 DataFrame:ads_hour、ads 和 advertising,它们包含日期时间信息,我们需要将它们进行合并。

星火作家大神
星火作家大神

星火作家大神是一款面向作家的AI写作工具

下载

原始数据模拟:

import pandas as pd

# 模拟数据
data_ads_hour = {'Date': ['2023-01-01 10:00:00', '2023-01-01 11:00:00', '2023-01-02 12:00:00'],
                 'Impressions': [100, 120, 150]}
ads_hour = pd.DataFrame(data_ads_hour)

data_ads = {'Time': ['2023-01-01 10:00:00', '2023-01-01 11:00:00', '2023-01-03 13:00:00'],
            'Clicks': [10, 15, 20]}
ads = pd.DataFrame(data_ads)

data_advertising = {'TV': ['2023-01-01 10:00:00', '2023-01-01 11:00:00', '2023-01-02 12:00:00'],
                    'Spend': [500, 600, 700]}
advertising = pd.DataFrame(data_advertising)

print("原始 ads_hour:\n", ads_hour)
print("\n原始 ads:\n", ads)
print("\n原始 advertising:\n", advertising)

使用 pd.concat 进行合并:

# 1. 确保所有用于合并的日期时间列为 datetime 类型
ads_hour['Date'] = pd.to_datetime(ads_hour['Date'], errors='coerce')
ads['Time'] = pd.to_datetime(ads['Time'], errors='coerce')
advertising['TV'] = pd.to_datetime(advertising['TV'], errors='coerce')

# 2. 第一次合并:ads_hour 和 ads
# 目标:将 ads_hour 的 'Date' 列与 ads 的 'Time' 列进行合并
merged_ads_hour_ads = pd.concat(
    [ads_hour.set_index('Date'), ads.set_index('Time')], # 将合并键设置为索引

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

53

2025.12.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

352

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2075

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

347

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

255

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

324

2023.10.09

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.9万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号