如何在Python中从日期时间中删除时间?

16 浏览
0 Comments

如何在Python中从日期时间中删除时间?

我使用pandas.to_datetime来解析我的数据中的日期。尽管日期都是每天的,但Pandas默认使用datetime64[ns]来表示日期。\n我想知道是否有一种优雅/聪明的方法可以将日期转换为datetime.datedatetime64[D],这样在将数据写入CSV时,日期不会附加00:00:00。我知道我可以逐个元素地手动转换类型:\n[dt.to_datetime().date() for dt in df.dates]\n但是这样做非常慢,因为我有很多行,而且这有点违背了使用pandas.to_datetime的目的。有没有一种一次性转换整列的dtype的方法?或者,pandas.to_datetime是否支持精度规范,以便在处理每日数据时可以去掉时间部分?

0
0 Comments

问题的出现原因是,虽然stackoverflow上有一个回答了问题,但它没有解决性能问题,因为它仍然依赖于Python的datetime对象,所以对它们的任何操作都不会向量化,即速度较慢。所以需要一个更高效的替代方法。

解决方法是使用pandas库中的dt.floor('d')方法,它可以将时间部分设置为00:00:00,从而达到只保留日期部分的效果。这种方法在以下情况下能够满足要求:

- 打印到屏幕上

- 保存为csv文件

- 在groupby操作中使用该列

这种方法更高效,因为它是向量化的操作。

编辑:事实上,OP更喜欢的答案可能是“如果所有的观测值的时间都是00:00:00,最新版本的pandas不会将其写入csv文件”。不幸的是,to_json仍然会写入完整的00:00:00。

这种方法比dt.normalize()在长度超过几百个元素的序列上更快。在一个超过100万行的数据框中,这种方法比我找到的其他选项都要快得多,只有normalize稍微慢一些。此外,保持日期部分是pandas本地的,这意味着它可以保存到HDF存储中(从pandas 1.1.4开始,datetime.date列无法保存到HDF存储中)。

0
0 Comments

问题的原因是:需要从Python的datetime对象中删除时间部分。

解决方法是:使用dt.date方法从datetime对象中提取日期部分,并将其赋值给一个新的列date_only。但需要注意的是,此操作会将列的类型更改为对象类型,因此需要使用astype('datetime64')将其转换回datetime类型以保持一致性。

以下是完整的代码解决方案:

df['date_only'] = df['date_time_column'].dt.date
df['date_only'] = df['date_only'].astype('datetime64')

这样就可以从Python的datetime对象中删除时间部分并保持一致性了。

0
0 Comments

从上述内容中可以得出,问题的出现是因为需要从日期时间中移除时间部分。解决方法是使用pandas库中的.dt方法来访问日期部分。具体的解决方法有两种:

1. 将日期部分提取出来,并保存为datetime.date类型:

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

2. 将日期部分保持为datetime64类型,并将时间部分设置为午夜(00:00:00):

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

通过使用这两种方法,可以从日期时间中移除时间部分,并以所需的格式显示日期。

0