Python中创建历史DataFrame存储每小时刷新的current_df全量数据
实现历史数据留存的方法
核心思路是给每次刷新的current_df添加时间戳标识,再合并到history_df中,以此区分同一Robot ID在不同时间的记录,确保所有历史数据都被保留。
具体实现步骤
- 初始化历史数据集:首次运行时创建空的
history_df,或从文件/数据库加载已保存的历史数据。 - 为当前数据打时间戳:每获取一次
current_df,新增一列(比如refresh_time),记录当前刷新的整点时间(用pd.Timestamp.now().floor('H')可精准取整到小时)。 - 合并历史与当前数据:用
pd.concat()将带时间戳的current_df追加到history_df,实现全量历史留存。 - 持久化存储(可选):若需要长期保存,每次合并后将
history_df写入文件或数据库即可。
示例代码
import pandas as pd # 初始化history_df(首次运行时执行) if 'history_df' not in locals(): history_df = pd.DataFrame() # 模拟每小时获取的current_df数据 current_df = pd.DataFrame({ 'Robot ID': ['R001', 'R002', 'R003'], 'Distance': [100, 200, 150] }) # 添加当前刷新的整点时间戳 current_df['refresh_time'] = pd.Timestamp.now().floor('H') # 合并到历史数据集 history_df = pd.concat([history_df, current_df], ignore_index=True) # 查看合并后的结果 print(history_df)
按此方法,同一个Robot ID在不同时间的记录会作为独立行存在,完全满足留存所有历史数据的需求。
关于write_dataframe()的去重问题
这个函数的去重行为完全由其实现逻辑决定:
- 若为自定义函数:直接查看内部代码,确认是否存在针对
Robot ID的去重操作(比如调用drop_duplicates(),或写入数据库时设置了Robot ID为主键导致旧数据被覆盖)。 - 若为第三方库函数:需参考对应文档,但通用的写入函数默认不会自动去重,除非你显式指定去重参数,或目标存储(如数据库表)将
Robot ID设为主键,导致写入时同ID旧数据被覆盖。
如果已经给每条记录添加了唯一时间戳,即使Robot ID重复,整条数据仍是唯一的,此时即使write_dataframe()有去重逻辑,也不会误删历史记录(除非它同时将Robot ID和时间戳作为重复判断依据)。
内容的提问来源于stack exchange,提问作者HRDSL
相关产品推荐
相关产品推荐

