Python中移除日期时间列的时间并恢复原始日期格式
解决Excel合并后日期格式错乱问题
从根源解决:读取Excel时就正确解析日期
你的问题核心是pd.read_excel默认按月/日/年解析日期字符串,但原始数据是日/月/年格式,加上合并后可能出现混合数据类型(部分工作表是字符串、部分是Timestamp),导致后续转换报错。直接在读取阶段修正,代码改成这样:
import pandas as pd # 读取所有工作表,指定dayfirst=True让pandas按日/月/年解析日期 dfs = pd.read_excel('C:/Sam/Predicting Outcomes .xlsx', sheet_name=None, dayfirst=True, parse_dates=['Date_of_Birth']) df_toAppend = pd.concat(dfs.values(), ignore_index=True) # 去掉时间部分,转成纯日期格式 df_toAppend['Date_of_Birth'] = df_toAppend['Date_of_Birth'].dt.date
dayfirst=True:明确告知pandas日期字符串的首位是日,次位是月,避免顺序颠倒。parse_dates=['Date_of_Birth']:指定要解析的日期列,确保读取后统一为datetime类型,杜绝混合类型问题。
修复已合并的问题DataFrame
如果已经生成了有问题的DataFrame,按以下步骤处理:
- 统一列的类型为字符串,解决混合类型冲突:
df['Date_of_Birth'] = df['Date_of_Birth'].astype(str)
- 按原始日/月/年格式解析为datetime:
# 假设原始日期是"02/03/1992"这种斜杠分隔格式,指定format匹配 df['Date_of_Birth'] = pd.to_datetime(df['Date_of_Birth'], format='%d/%m/%Y', errors='coerce')
errors='coerce':遇到无法解析的内容会转为NaT,避免程序中断。
- 去掉时间部分,按需输出格式:
# 转成不带时间的日期对象 df['Date_of_Birth'] = df['Date_of_Birth'].dt.date # 或者转成字符串格式,比如"02/03/1992" df['Date_of_Birth'] = df['Date_of_Birth'].dt.strftime('%d/%m/%Y')
你之前方法报错的原因
- 方法1:列是混合类型(含元组、非datetime对象),
.dt访问器仅支持纯datetime列。 - 方法2:指定的
%Y%M%d格式和实际数据完全不匹配,且数据中存在Timestamp转成的字符串,解析失败。 - 方法3:列中包含非字符串类型(如Timestamp对象),
.str访问器仅支持纯字符串列。
内容的提问来源于stack exchange,提问作者Dav Sam
相关产品推荐
相关产品推荐

