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

使用Pandas转换日期时间列为纯日期时遇数据类型错误求助

Pandas日期列类型转换失败问题解决

问题背景

尝试将格式为2016-04-29T16:19:04Z的日期时间转换为仅含日期的2016-04-29格式,但测试失败。错误提示ScheduledDay和AppointmentDay列的数据类型为object,而预期应为datetime64[ns]。

原代码

import numpy as np
import pandas as pd


def read_csv():
    # Method to read the CSV file "Hospital_patients_datasets.csv" using pandas.
    
    file_path = "Hospital_patients_datasets.csv"
    # Returns: Pandas DataFrame containing the data from the CSV file.
    
    ds = pd.read_csv(file_path)
    
def converting_dtype():
    ds = read_csv()

    # Method to convert 'ScheduledDay' and 'AppointmentDay' columns to datetime objects.
    # Returns: DataFrame with 'ScheduledDay' and 'AppointmentDay' columns converted to datetime objects.

    ds['ScheduledDay'] = pd.to_datetime(ds['ScheduledDay'], format='%Y-%m-%dT%H:%M:%SZ').dt.date
    ds['AppointmentDay'] = pd.to_datetime(ds['AppointmentDay'], format='%Y-%m-%dT%H:%M:%SZ').dt.date
    return ds

错误信息

Running Test case
------------- Test Case Failed -------------
Data type of column 'ScheduledDay' differs:
Your output Datatype: object
Expected output Datatype: datetime64[ns]

Data type of column 'AppointmentDay' differs:
Your output Datatype: object
Expected output Datatype: datetime64[ns]

Following rows do not match the expected rows:
Data Differences:

问题分析与修复

1. 基础逻辑错误:read_csv函数未返回DataFrame

原代码中read_csv函数创建了DataFrame但未返回,导致converting_dtype中ds = read_csv()得到的是None,后续操作会触发隐性错误。

2. 类型不匹配根源:.dt.date转换为Python原生对象

使用.dt.date会将Pandas的datetime64[ns]类型转换为Python原生date对象,此时列的数据类型变为object,不符合测试要求的datetime64[ns]类型。

要保留datetime64[ns]类型同时只保留日期部分,可使用.dt.normalize()(将时间部分置为00:00:00)或.dt.floor('D'),两者效果一致。

修正后的代码

import numpy as np
import pandas as pd


def read_csv():
    # 读取CSV文件并返回DataFrame
    file_path = "Hospital_patients_datasets.csv"
    ds = pd.read_csv(file_path)
    return ds  # 新增返回语句
    
def converting_dtype():
    ds = read_csv()

    # 将列转换为datetime64[ns]类型,同时保留日期部分
    ds['ScheduledDay'] = pd.to_datetime(ds['ScheduledDay'], format='%Y-%m-%dT%H:%M:%SZ').dt.normalize()
    ds['AppointmentDay'] = pd.to_datetime(ds['AppointmentDay'], format='%Y-%m-%dT%H:%M:%SZ').dt.normalize()
    return ds

验证说明

修正后,ScheduledDay和AppointmentDay列的类型会变为datetime64[ns],且日期部分正确保留为YYYY-MM-DD格式(时间部分为00:00:00,不影响日期的使用和测试验证)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:27:04