pandas处理日期无法输出%d/%m/%Y格式且VSCode显示T00:00:00问题
问题解答
1. 为什么VSCode Data Viewer会显示T00:00:00时间后缀
你通过apply返回的是Python原生的datetime.date对象,但pandas会自动将整列的date对象统一转换为datetime64[ns]类型存储,该类型本身必须携带时间部分,无显式时间时默认填充零点。VSCode Data Viewer渲染datetime64类型时会完整输出标准ISO格式,因此会显示T00:00:00后缀。
2. 该时间部分是默认生成的吗
是的。只要你将列转换为pandas的datetime类型,未显式指定的时间部分都会默认填充为00:00:00,即使你传入的是原生date对象,存入pandas列时也会自动补全时间部分。
3. Python处理数据时会忽略该时间部分吗
分场景:
- 如果你做日期维度的计算,比如日期差计算、按日期分组聚合,只要所有数据的时间部分都是零点,不会对计算结果产生任何影响
- 如果你要做字符串格式化输出、或者和带非零点时间的日期做对比,不会自动忽略该时间部分,会携带零点参与操作
4. 为什么指定的%d/%m/%Y格式未生效
你混淆了strptime和strftime的作用:strptime的功能是将符合指定格式的字符串解析为日期对象,不是将日期对象转换为指定格式的字符串。你当前的操作是把字符串解析成了日期类型,而日期类型本身没有固定显示格式,打印时默认使用ISO标准格式(%Y-%m-%d)输出,因此看不到你想要的%d/%m/%Y格式。
推荐解决方案
场景1:仅需要%d/%m/%Y格式的字符串,不需要日期计算
不需要解析为日期对象,直接替换分隔符即可,性能更高:
file["Date"] = file["Date"].str.replace('.', '/')
场景2:需要保留日期类型做计算,输出时显示指定格式
输出时用dt.strftime转换格式即可:
# 打印时转换格式 print(file["Date"].dt.strftime('%d/%m/%Y')) # 额外新增一列存储指定格式的字符串 file["Date_str"] = file["Date"].dt.strftime('%d/%m/%Y')
更高效的日期解析方案(适合大文件)
不需要手动处理字符串+apply,直接在read_csv阶段完成日期解析,性能远高于自定义apply逻辑:
file = pd.read_csv( 'file.txt', sep=';', skiprows=56, parse_dates=['Date'], date_parser=lambda x: pd.to_datetime(x, format='%d.%m.%Y') )
内容的提问来源于stack exchange,提问作者Sultry T.
相关产品推荐
相关产品推荐

