使用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
相关产品推荐
相关产品推荐

