使用pandas.to_datetime时仅保留日期部分

399

我使用 pandas.to_datetime 来解析我的数据中的日期。尽管这些日期只有每天的时间,但默认情况下Pandas使用datetime64[ns]来表示日期。 我想知道是否有一种优雅/聪明的方式将这些日期转换为datetime.datedatetime64[D],以便在将数据写入CSV时,日期不会附加上00:00:00。我知道我可以逐个元素手动转换类型:

[dt.to_datetime().date() for dt in df.dates]

但是由于我有很多行,这种方法非常慢,而且有点违背使用 pandas.to_datetime 的初衷。有没有一种方法可以一次转换整个列的dtype?或者,pandas.to_datetime是否支持精度规格,以便我在处理每日数据时可以去掉时间部分?

13个回答

4
在超过1000000行的表格中,我发现这两种方法都很快,而使用“floor”函数略快一些:
df['mydate'] = df.index.floor('d')

或者
df['mydate'] = df.index.normalize()

如果您的索引具有时区信息,但不希望在结果中显示,请执行以下操作:

df['mydate'] = df.index.tz_localize(None).floor('d')

df.index.date 的速度慢很多;to_datetime() 更糟糕。两者的进一步劣势是,结果无法保存到 hdf 存储中,因为它不支持类型 datetime.date。

请注意,我在这里使用索引作为日期源;如果您的来源是另一列,则需要添加 .dt,例如 df.mycol.dt.floor('d')


1
这对我来说很有用,针对UTC时间戳(2020-08-19T09:12:57.945888)有效。
for di, i in enumerate(df['YourColumnName']):
    df['YourColumnName'][di] = pd.Timestamp(i)

0
如果该列尚未处于日期时间格式:
df['DTformat'] = pd.to_datetime(df['col'])

一旦它处于日期时间格式,您可以像这样将整个列转换为仅日期:
df['DateOnly'] = df['DTformat'].apply(lambda x: x.date())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接