You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除DataFrame时间数据的小数秒以实现多表合并

解决DataFrame基于时间戳合并(去除小数秒匹配)的问题

我来帮你搞定这个时间戳匹配的难题!你遇到的核心问题是Excel时间本质是数值型的小数(1天=1,小数部分对应时分秒毫秒),所以光改显示格式根本没法去掉实际存储的毫秒值,必须在Pandas里直接处理数据本身,具体步骤如下:

步骤1:确保时间列转为Datetime类型

首先要把两个DataFrame的Time列统一转成Pandas的datetime类型,不管你读进来的是字符串还是Excel的数值时间,这一步都能统一格式:

import pandas as pd

# 读取两个Excel文件
df1 = pd.read_excel("你的第一个文件.xlsx")
df2 = pd.read_excel("你的第二个文件.xlsx")

# 转换为datetime类型(自动识别绝大多数时间格式,包括Excel数值)
df1["Time"] = pd.to_datetime(df1["Time"])
df2["Time"] = pd.to_datetime(df2["Time"])

步骤2:移除df1的小数秒

Pandas的datetime类型有专门的方法可以快速截断或取整到整秒,你可以根据需求选下面任意一种:

  • 向下取整(直接去掉小数秒):适合不需要四舍五入的场景
    df1["Time"] = df1["Time"].dt.floor("S")
    
  • 四舍五入到整秒:如果需要更精准的时间对齐
    df1["Time"] = df1["Time"].dt.round("S")
    
  • 向上取整:少数需要把0.1秒也算成下一秒的场景
    df1["Time"] = df1["Time"].dt.ceil("S")
    

步骤3:基于处理后的时间戳合并DataFrame

现在两个DataFrame的Time列都是整秒格式了,直接用merge函数合并即可,连接方式根据你的需求选择:

# 内连接:只保留两边都存在的时间记录(最常用)
merged_df = pd.merge(df1, df2, on="Time", how="inner")

# 左连接:保留df1所有记录,匹配不到的df2字段填NaN
# merged_df = pd.merge(df1, df2, on="Time", how="left")

# 右连接:保留df2所有记录,匹配不到的df1字段填NaN
# merged_df = pd.merge(df1, df2, on="Time", how="right")

补充说明

为什么Excel里改格式没用?因为Excel的时间是以天数为单位的浮点数,比如2024-05-20 12:34:56.789在Excel里存储的是一个类似45432.5242915的数值,格式只是改变显示方式,实际存储的小数部分(毫秒)依然存在,所以必须在Pandas里修改数据本身才能实现匹配。

内容的提问来源于stack exchange,提问作者MDS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:13:16