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

如何修改DataFrame混合类型列的日期时间格式(保留字符串)

解决DataFrame混合类型列的时间格式化问题

问题说明

我的DataFrame中Start Shift列同时存在datetime和字符串两种数据类型,需要将该列的datetime值转换为HH:MM AM/PM格式的时间字符串,同时保留原字符串内容不变。但尝试的代码未生效,DataFrame没有任何变化。

用户使用的错误代码

df=pd.read_excel(r"C:\Users\Mahmoud.Bader\Desktop\FP Attendance V1.6 Apr 22.xlsx","Attendance").fillna("")

for i in df['Start Shift']:
    try:
        if i.isalpha():
            i
    except:
            i.strftime('%H:%M %p')

原DataFrame示例

DepartmentStart Shift
AccommodationAnnual
AccommodationOFF Day
Accommodation2022-04-01 12:00:00
Accommodation2022-04-01 09:00:00
Accommodation2022-04-01 10:00:00
ComplaintsOFF Day
Complaints2022-04-29 07:00:00
Complaints2022-04-29 08:00:00
Complaints2022-04-30 07:00:00
Complaints2022-04-30 08:00:00

期望结果

DepartmentStart Shift
AccommodationAnnual
AccommodationOFF Day
Accommodation12:00 PM
Accommodation09:00 AM
Accommodation10:00 AM
ComplaintsOFF Day
Complaints07:00 AM
Complaints08:00 AM
Complaints07:00 AM
Complaints08:00 AM

错误原因分析

  1. 遍历df['Start Shift']时,i是元素的副本,修改i不会同步到原DataFrame中。
  2. 异常处理逻辑错误:datetime对象没有isalpha()方法,会直接触发异常,但处理后的值没有赋值回DataFrame。
  3. OFF Day包含空格,isalpha()会返回False,导致该字符串被错误地代入异常处理逻辑,触发新的错误。

正确解决方案

使用apply函数逐元素处理,判断类型后格式化时间并赋值回原列:

方法1:自定义函数处理

import pandas as pd

# 读取数据
df = pd.read_excel(r"C:\Users\Mahmoud.Bader\Desktop\FP Attendance V1.6 Apr 22.xlsx", "Attendance").fillna("")

def format_shift_value(val):
    # 判断是否为datetime类型
    if isinstance(val, pd.Timestamp):
        # 转换为12小时制时间格式
        return val.strftime('%I:%M %p')
    # 字符串类型直接返回
    return val

# 应用处理函数到目标列
df['Start Shift'] = df['Start Shift'].apply(format_shift_value)

方法2:lambda表达式简化

import pandas as pd

df = pd.read_excel(r"C:\Users\Mahmoud.Bader\Desktop\FP Attendance V1.6 Apr 22.xlsx", "Attendance").fillna("")

df['Start Shift'] = df['Start Shift'].apply(
    lambda x: x.strftime('%I:%M %p') if isinstance(x, pd.Timestamp) else x
)

说明

  • %I用于12小时制时间格式(01-12),如果需要24小时制可以替换为%H。
  • apply函数会遍历列中每个元素,处理后返回新的序列,赋值回原列即可完成修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:09:32