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

求助:使用Pandas处理Excel时间数据的格式与识别问题

用Pandas修正Excel时间数据的问题解决

需求场景

需要修正Excel中的时间数据,原始表格与期望结果如下:

原始表格

ArrivalDateArrivalTime
2024-01-012024-01-01 12:00:01 PM
2024-04-011990-01-00 12:01:00 PM
2024-03-0112:03:15 AM
2024-01-011990-01-00
2024-04-01

期望表格

ArrivalDateArrivalTime
2024-01-012024-01-01 12:00:01 PM
2024-04-012024-04-01 12:01:00 PM
2024-03-012024-03-01 12:03:15 AM
2024-01-01Missing Time
2024-04-01Need more Info

原代码问题分析

你编写的代码存在以下问题:

  • 读取Excel的方法错误,应为pd.read_excel()而非pd.read.excel();
  • 列名未加引号,如df[ArrivalDate]应改为df['ArrivalDate'];
  • 处理ArrivalTime时使用单一格式解析,无法匹配多种时间格式,且1990-01-00是无效日期,直接用pd.to_datetime会返回NaT;
  • 最终生成的是datetime对象,Pandas默认以24小时制显示,不符合带AM/PM的格式要求。

修正后的代码

import pandas as pd

# 读取Excel文件,替换为你的文件路径
df = pd.read_excel("path/excelfile.xls")

# 转换ArrivalDate列为datetime格式
df['ArrivalDate'] = pd.to_datetime(df['ArrivalDate'])

def process_arrival_time(row):
    arrival_time = row['ArrivalTime']
    arrival_date = row['ArrivalDate']
    
    # 处理空值情况
    if pd.isna(arrival_time):
        return "Need more Info"
    
    time_str = str(arrival_time).strip()
    
    # 处理1990-01-00开头的记录
    if time_str.startswith("1990-01-00"):
        # 拆分出时间部分(存在时间的情况)
        time_part = time_str.split(" ", 1)[-1] if " " in time_str else ""
        if not time_part:
            return "Missing Time"
        # 组合日期与时间,转换为目标格式
        full_datetime = pd.to_datetime(f"{arrival_date.date()} {time_part}")
        return full_datetime.strftime("%Y-%m-%d %I:%M:%S %p")
    # 处理只有时间的记录
    elif ":" in time_str and "-" not in time_str:
        full_datetime = pd.to_datetime(f"{arrival_date.date()} {time_str}")
        return full_datetime.strftime("%Y-%m-%d %I:%M:%S %p")
    # 处理已有正确日期的时间记录
    elif "-" in time_str and ":" in time_str:
        try:
            dt = pd.to_datetime(time_str)
            return dt.strftime("%Y-%m-%d %I:%M:%S %p")
        except:
            return "Need more Info"
    # 处理仅1990-01-00无时间的情况
    elif time_str == "1990-01-00":
        return "Missing Time"
    # 其他异常情况
    else:
        return "Need more Info"

# 应用处理函数到每一行
df['ArrivalTime'] = df.apply(process_arrival_time, axis=1)

print(df)

关键修复点说明

  • 格式显示问题解决:通过strftime("%Y-%m-%d %I:%M:%S %p")将datetime对象转换为12小时制带AM/PM的字符串,%I对应12小时制小时,%p自动识别上午/下午。
  • 1990-01-00无效日期处理:直接通过字符串前缀判断,拆分出时间部分后与ArrivalDate的日期组合,避免直接解析无效日期导致的NaT。
  • 边界场景覆盖:分别处理空值、仅时间、仅无效日期、完整时间等多种情况,对应标记"Need more Info"或"Missing Time"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:48:16