
本教程详细阐述了如何使用pandas合并具有不同时间步长的dataframe,尤其是在处理不规则时间序列数据时。核心方法是利用 `pd.merge` 的 `how='outer'` 参数,确保所有数据帧中的独特时间戳都被保留,并对缺失值使用 `nan` 进行填充,从而实现数据的完整对齐和整合。
在数据分析和处理中,我们经常会遇到需要整合来自不同来源、但都基于时间序列的数据。这些数据可能以不同的采样频率或时间步长记录,例如10分钟、15分钟或30分钟间隔。直接使用简单的拼接(pd.concat)或内连接(pd.merge 默认行为)往往无法达到预期效果,因为它可能导致数据丢失或无法正确对齐。本教程将介绍如何利用Pandas的强大合并功能,特别是 pd.merge(how='outer'),来高效地解决这类问题,确保所有时间点的数据都被妥善保留。
当合并多个具有不同时间戳间隔的DataFrame时,主要挑战在于:
传统的 pd.concat 函数通常用于堆叠DataFrame,而 pd.merge 的默认 inner 连接则只保留在所有DataFrame中都存在的键。这两种方法都无法满足上述“保留所有独特时间戳并填充 NaN”的需求。
pd.merge 函数结合 how='outer' 参数是解决此问题的理想方案。outer 合并(也称为全外连接)会返回所有DataFrame中所有匹配和不匹配的行,对于不匹配的行,缺失的列值将用 NaN 填充。
动力先锋仿阿里巴巴B2B电子商务系统
前台功能介绍:1、网页首页显示有高级会员推荐,精品推荐,商业机会分类列表,最新供求信息,网站动态,推荐企业,行业动态等;2、商业机会栏目功能有:二级分类,已经带有详细分类的数据库,后台可以更改增加操作,并可以推荐公司,栏目分为分类显示信息,最新的采购、供应、合作和代理信息,搜索时同样按分类,信息,时间,交易类型等搜索;3、展厅展品栏目功能:二级分类,已经带有详细分类的数据库,后台可以更改增加操作,
0
查看详情
数据准备与时间戳转换: 首先,我们需要创建示例DataFrame,并确保所有时间戳列都已正确转换为Pandas的 datetime 对象。这是进行任何时间序列操作的关键前提。
import pandas as pd
import numpy as np
# 示例数据
data1 = {
'Timestamp': ['2019/04/02 10:00:00', '2019/04/02 10:10:00', '2019/04/02 10:20:00', '2019/04/02 10:30:00'],
'data1': [1, 1, 1, 1]
}
df1 = pd.DataFrame(data1)
data2 = {
'Timestamp': ['2019/04/02 10:00:00', '2019/04/02 10:15:00', '2019/04/02 10:30:00', '2019/04/02 10:45:00', '2019/04/02 11:00:00'],
'data2': [2, 22, 222, 2222, 22222]
}
df2 = pd.DataFrame(data2)
data3 = {
'Timestamp': ['2019/04/02 10:00:00', '2019/04/02 10:30:00', '2019/04/02 11:00:00', '2019/04/02 11:30:00'],
'data3': [3, 33, 333, 3333]
}
df3 = pd.DataFrame(data3)
# 将Timestamp列转换为datetime类型
df1['Timestamp'] = pd.to_datetime(df1['Timestamp'])
df2['Timestamp'] = pd.to_datetime(df2['Timestamp'])
df3['Timestamp'] = pd.to_datetime(df3['Timestamp'])
print("df1:\n", df1)
print("\ndf2:\n", df2)
print("\ndf3:\n", df3)执行链式外连接合并: 通过链式调用 pd.merge,我们可以将多个DataFrame逐步合并。每次合并都使用 how='outer' 策略,以确保所有独特的时间戳都被累积到结果中。
# 使用how='outer'进行合并
# 第一次合并df1和df2
result = pd.merge(df1, df2, on='Timestamp', how='outer')
print("\n第一次合并 (df1, df2):\n", result)
# 第二次合并结果与df3
result = pd.merge(result, df3, on='Timestamp', how='outer')
print("\n第二次合并 (result, df3):\n", result)结果排序: 合并后的DataFrame可能不会按照时间戳顺序排列,因此需要对结果进行排序,以获得清晰、有序的时间序列数据。
# 对最终结果按Timestamp排序
result = result.sort_values('Timestamp').reset_index(drop=True)
print("\n最终合并结果 (按Timestamp排序):\n", result)import pandas as pd
import numpy as np
# 1. 准备示例数据
data1 = {
'Timestamp': ['2019/04/02 10:00:00', '2019/04/02 10:10:00', '2019/04/02 10:20:00', '2019/04/02 10:30:00'],
'data1': [1, 1, 1, 1]
}
df1 = pd.DataFrame(data1)
data2 = {
'Times
tamp': ['2019/04/02 10:00:00', '2019/04/02 10:15:00', '2019/04/02 10:30:00', '2019/04/02 10:45:00', '2019/04/02 11:00:00'],
'data2': [2, 22, 222, 2222, 22222]
}
df2 = pd.DataFrame(data2)
data3 = {
'Timestamp': ['2019/04/02 10:00:00', '2019/04/02 10:30:00', '2019/04/02 11:00:00', '2019/04/02 11:30:00'],
'data3': [3, 33, 333, 3333]
}
df3 = pd.DataFrame(data3)
# 2. 将Timestamp列转换为datetime类型
df1['Timestamp'] = pd.to_datetime(df1['Timestamp'])
df2['Timestamp'] = pd.to_datetime(df2['Timestamp'])
df3['Timestamp'] = pd.to_datetime(df3['Timestamp'])
# 3. 使用how='outer'进行链式合并
result = pd.merge(df1, df2, on='Timestamp', how='outer')
result = pd.merge(result, df3, on='Timestamp', how='outer')
# 4. 对最终结果按Timestamp排序
result = result.sort_values('Timestamp').reset_index(drop=True)
print("最终合并结果:")
print(result)输出结果:
最终合并结果:
Timestamp data1 data2 data3
0 2019-04-02 10:00:00 1.0 2.0 3.0
1 2019-04-02 10:10:00 1.0 NaN NaN
2 2019-04-02 10:15:00 NaN 22.0 NaN
3 2019-04-02 10:20:00 1.0 NaN NaN
4 2019-04-02 10:30:00 1.0 222.0 33.0
5 2019-04-02 10:45:00 NaN 2222.0 NaN
6 2019-04-02 11:00:00 NaN 22222.0 333.0
7 2019-04-02 11:30:00 NaN NaN 3333.0这个结果与问题中“desired result”完全一致,成功地将所有独特的时间戳整合到一起,并用 NaN 填充了缺失的数据。
合并具有不同时间步长的Pandas DataFrame是数据处理中的常见任务。通过掌握 pd.merge 函数的 how='outer' 参数,我们可以有效地整合来自多个源的不规则时间序列数据,确保所有时间戳都得到保留,并用 NaN 标记缺失值。这种方法提供了一个强大而灵活的解决方案,适用于需要全面视图并精确对齐时间序列数据的场景。
以上就是Pandas高级合并:整合不同时间间隔的DataFrame的详细内容,更多请关注其它相关文章!
# 如何实现
# 南坪seo整站优化系统
# 抖音广告营销推广怎么做
# seo长期优化
# 医疗网站建设济南
# 酒水线下营销推广方式
# 贵阳网站建设公司招聘
# 黄江抖音seo公司
# 福田推广网站优化平台
# 陕西优化网站排名软件
# 店小友推广营销
# 数据丢失
# 都已
# 自定义
# 我们可以
# 自然语言
# 转换为
# 阿里巴巴
# 多个
# 链式
# red
# 排列
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Python中对象引用与链表属性赋值的机制解析
虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画
Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件
支付宝网页版在线入口 支付宝官网电脑登录入口
之了课堂app做题入口
《撕歌》会员开通方法
excel怎么制作考勤表 excel考勤模板与函数公式讲解
小红书网页版在线直达 小红书网页版免费登录入口
cad怎么隐藏指定的图层_cad隐藏或冻结图层方法
iPhone14开启Apple TV遥控设置
微信客户端怎么查看二维码_微信客户端个人二维码查看方法
Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区
PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略
rabbitmq 持久化有什么缺点?
Win10截图远程协助 Win10远程桌面截屏法【场景应用】
在PHP环境中正确加载HTML资源:CSS样式与图片路径指南
哈尔滨城市通昵称修改方法
SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南
抖音商城官网是什么_抖音商城官方网址与访问方法
火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】
sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码
深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析
在React中正确处理HTML input type="number"的数值类型
composer 提示 "requires ext-soap" 缺少 SOAP 扩展怎么办?
Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】
mysql怎么查询数据_mysql基础查询语句使用教程
铁路12306入口 铁路12306官网版入口登录网址
获取WooCommerce产品在后台编辑页面的分类ID
C++ switch case字符串_C++如何实现字符串switch匹配
Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程
偃武诸葛亮阵容搭配推荐
处理含命名空间的XML文件 Power Query中的高级技巧
一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化
利用Flexbox实现图片元素的二维布局:2x2网格排列指南
《猎聘》筛选猎头岗位方法
抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法
解决jQuery多计算器输入字段冲突的教程
WPS文字如何进行简繁转换
QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务
键盘保修需要什么_键盘售后维修流程
店铺如何做视频号推广?做视频号推广有用吗?
J*aScript字符串_Unicode处理
一点万象签到领积分指南
抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系
冬季去哪个城市旅游更有可能观测到极光
《随手记》备份数据方法
《知到》打卡课程方法
Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题
小红书如何引流到私信?引流到私信有用吗?
如何查找哪个composer包引入了特定的依赖?
2025-12-09
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。