关于pd.to_datetime直接转换DataFrame日期列的两类疑问
pd.to_datetime批量转换DataFrame日期列问题解析
问题描述
单独将DataFrame中的日期列转为datetime64[ns]类型时一切正常,但直接对多列执行pd.to_datetime转换时触发错误:
报错代码
df[['Date Range','ME Created Date/Time','Ready For Books Date/Time']]=pd.to_datetime(df[['Date Range','ME Created Date/Time','Ready For Books Date/Time']],format='%d-%m-%Y %H:%M:%S')
错误提示
to assemble mappings requires at least that [year, month, day] be specified: [day,month,year] is missing
数据样例
| Date Range | ME Created Date/Time | Ready For Books Date/Time |
|---|---|---|
| 11-05-2022 00:00:00 | 02-05-2022 14:31:37 | 11-05-2022 00:00:00 |
| 10-09-2022 00:00:00 | 06-09-2022 14:19:03 | 10-09-2022 00:00:00 |
| 10-09-2022 00:00:00 | 06-09-2022 14:19:03 | 10-09-2022 00:00:00 |
| 10-09-2022 00:00:00 | 06-09-2022 14:19:03 | 10-09-2022 00:00:00 |
| 10-09-2022 00:00:00 | 06-09-2022 14:19:03 | 10-09-2022 00:00:00 |
当前可行方案
已通过apply方法实现多列转换,代码如下:
df[['Date Range','ME Created Date/Time','Ready For Books Date/Time']] = df[['Date Range','ME Created Date/Time','Ready For Books Date/Time']].apply(pd.to_datetime, format='%d-%m-%Y %H:%M:%S')
疑问与解答
1. 能否不借助apply直接用pd.to_datetime转换多列?
可以。问题根源在于:当直接向pd.to_datetime传入多列DataFrame时,它会默认将每一列视为年、月、日的单独字段,而非完整的日期字符串。解决思路是先把多列转为单列Series(通过stack),转换后再转回多列(通过unstack):
# 指定需要转换的列 target_cols = ['Date Range','ME Created Date/Time','Ready For Books Date/Time'] # stack将列转成行,得到单列日期字符串,用pd.to_datetime转换后unstack还原结构 df[target_cols] = pd.to_datetime(df[target_cols].stack(), format='%d-%m-%Y %H:%M:%S').unstack()
2. 能否不用.dt.date返回仅含日期的结果?
可以。.dt.date返回的是Python原生date对象,若想保留pandas的datetime64类型且仅显示日期部分,可使用dt.normalize()或dt.floor('D'),它们会将时间部分统一设置为00:00:00,视觉上等价于仅日期,且更适合后续pandas操作:
target_cols = ['Date Range','ME Created Date/Time','Ready For Books Date/Time'] # 转换后统一去除时间部分 df[target_cols] = pd.to_datetime(df[target_cols].stack(), format='%d-%m-%Y %H:%M:%S').dt.normalize().unstack()
如果需要直接转换为仅日期字符串,也可以在转换时截取日期部分:
df[target_cols] = pd.to_datetime(df[target_cols].stack().str.split(' ').str[0], format='%d-%m-%Y').unstack()
内容的提问来源于stack exchange,提问作者Rajib Lochan Sarkar
相关产品推荐
相关产品推荐

