使用pandas.to_datetim时只保留日期部分

2024-04-26 14:44:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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是否支持精度规范,以便在处理日常数据时可以去掉时间部分?


Tags: csvto数据方法元素类型pandasdatetime
3条回答

简单解决方案:

df['date_only'] = df['date_time_column'].dt.date

虽然我对EdChum的答案投了更高的票,这是对OP提出的问题最直接的答案,但它并不能真正解决性能问题(它仍然依赖于pythondatetime对象,因此对它们的任何操作都不会矢量化——也就是说,它会很慢)。

A better performing alternative是使用df['dates'].dt.floor('d')。严格地说,它不“只保留日期部分”,因为它只是将时间设置为00:00:00。但它确实可以按照OP的要求工作,例如:

  • 打印到屏幕
  • 保存到csv
  • 使用该列groupby

。。。而且由于操作是矢量化的,所以效率更高。

编辑:事实上,操作人员更希望得到的答案可能是“最新版本的pandas如果所有观察都是00:00:00,请不要将时间写入csv”。

由于版本0.15.0,现在可以使用^{}轻松完成此操作,只需访问日期组件:

df['just_date'] = df['dates'].dt.date

上面返回一个datetime.date数据类型,如果您想要有一个datetime64,那么您可以将时间组件^{}设置为午夜,以便将所有值设置为00:00:00

df['normalised_date'] = df['dates'].dt.normalize()

这将使dtype保持为datetime64,但显示的只是date值。

相关问题 更多 >