我使用pandas.to_datetime
来分析数据中的日期。默认情况下,Pandas用datetime64[ns]
表示日期,即使这些日期都是每天的。
我想知道是否有一种优雅/聪明的方法可以将日期转换为datetime.date
或datetime64[D]
,这样,当我将数据写入CSV时,日期就不会附加00:00:00
。我知道我可以逐个元素手动转换类型:
[dt.to_datetime().date() for dt in df.dates]
但这真的很慢,因为我有很多行,这有点违背了使用pandas.to_datetime
的目的。有没有办法一次转换整个列的dtype
?或者,pandas.to_datetime
是否支持精度规范,以便在处理日常数据时可以去掉时间部分?
简单解决方案:
虽然我对EdChum的答案投了更高的票,这是对OP提出的问题最直接的答案,但它并不能真正解决性能问题(它仍然依赖于python
datetime
对象,因此对它们的任何操作都不会矢量化——也就是说,它会很慢)。A better performing alternative是使用
df['dates'].dt.floor('d')
。严格地说,它不“只保留日期部分”,因为它只是将时间设置为00:00:00
。但它确实可以按照OP的要求工作,例如:groupby
。。。而且由于操作是矢量化的,所以效率更高。
编辑:事实上,操作人员更希望得到的答案可能是“最新版本的
pandas
如果所有观察都是00:00:00
,请不要将时间写入csv”。由于版本} 轻松完成此操作,只需访问日期组件:
0.15.0
,现在可以使用^{上面返回一个} 设置为午夜,以便将所有值设置为
datetime.date
数据类型,如果您想要有一个datetime64
,那么您可以将时间组件^{00:00:00
:这将使dtype保持为
datetime64
,但显示的只是date
值。相关问题 更多 >
编程相关推荐