求助:使用pandas to_datetime时如何保留时间信息
问题重现
执行以下代码:
import pandas as pd df = pd.DataFrame(["2013-03-13T00:00:00"], columns=["t"]) pd.to_datetime(df["t"])
得到结果:
0 2013-03-13 Name: t, dtype: datetime64[ns]
希望保留时间信息(即使是00:00:00),因为其他行包含有效时间数据,但pd.to_datetime执行后显示时会隐藏时间部分,尝试多个参数未解决。
环境版本:
pd.__version__ # '1.5.3' sys.version # '3.10.9 (main, Feb 28 2023, 09:28:42) [Clang 14.0.0 (clang-1400.0.29.202)]'
解决方案
1. 时间信息并未丢失
pandas只是在显示时自动隐藏了全零的时间部分,实际时间数据仍然存在。验证方法:
dt_series = pd.to_datetime(df["t"]) print(dt_series.iloc[0]) # 输出:2013-03-13 00:00:00
当数据列中存在带非零时间的行时,pandas会自动显示完整的日期+时间格式,无需额外设置。
2. 强制显示完整时间格式
如果需要无论时间是否全零都显示完整格式,可通过以下方式实现:
方式一:修改全局显示选项
设置datetime类型的默认显示格式:
pd.set_option("display.float_format", lambda x: f"{x:%Y-%m-%d %H:%M:%S}" if isinstance(x, pd.Timestamp) else x)
设置后,所有datetime列输出时都会显示完整的日期和时间。
方式二:临时格式化输出(推荐,不影响全局设置)
不改变原数据的datetime类型,仅临时格式化显示:
# 方法1:转换为字符串格式输出(仅用于展示,不建议修改原数据类型) dt_series.dt.strftime("%Y-%m-%d %H:%M:%S") # 方法2:用style格式化DataFrame显示 df["t"] = dt_series df.style.format({"t": "{:%Y-%m-%d %H:%M:%S}"})
内容的提问来源于stack exchange,提问作者chaim
相关产品推荐
相关产品推荐

