Pandas:将列转换为日期时间格式
Pandas:将列转换为日期时间格式
我使用pandas.to_datetime
来解析我的数据中的日期。尽管日期都是每天的,但Pandas默认使用datetime64[ns]
来表示日期。\n我想知道是否有一种优雅/巧妙的方法可以将日期转换为datetime.date
或datetime64[D]
,这样当我将数据写入CSV时,日期就不会附加00:00:00
。我知道我可以逐个元素地手动转换类型:\n
[dt.to_datetime().date() for dt in df.dates]
\n但是由于我有很多行,这样做非常慢,而且有点违背使用pandas.to_datetime
的目的。是否有一种一次性转换整个列的方法?或者,pandas.to_datetime
是否支持精度规范,以便在处理每日数据时去除时间部分?
问题的出现原因是:原始的解决方法虽然能够将列转换为日期格式,但是由于依赖于Python的datetime对象,所以在对其进行操作时不会进行向量化处理,导致速度较慢。
解决方法是:使用df['dates'].dt.floor('d'),这样可以将时间设置为00:00:00,虽然严格来说并没有“仅保留日期部分”,但在一些需要打印、保存为CSV或进行分组操作时,能够达到与原问题描述一致的效果。而且这种方法更加高效,因为操作是向量化处理的。
编辑补充:实际上,原问题提问者更希望的答案可能是“最新版本的pandas在所有观测值的时间为00:00:00时,不会将其写入CSV文件”。不幸的是,to_json仍会写入完整的00:00:00。
这种方法比dt.normalize()在长度超过几百个元素的序列上更快。在一个超过100万行的数据框上,这种方法比我发现的其他方法都要快得多,只有normalize略慢一些。此外,保持日期是pandas原生的形式意味着可以将其保存到hdf存储中(pandas 1.1.4之后,datetime.date列不能保存到hdf存储中)。
Pandas: 将列转换为日期时间格式
问题原因:有时候我们需要将DataFrame中的某一列转换为日期时间格式,但是直接转换可能会改变数据类型。
解决方法:下面是一个简单的解决方法,可以将DataFrame中的某一列转换为日期时间格式。
df['date_only'] = df['date_time_column'].dt.date
需要注意的是,上述方法会改变数据类型为object。如果需要保持数据类型的一致性,可以使用astype('datetime64')方法进行转换。
df['date_only'] = df['date_time_column'].dt.date.astype('datetime64')
这样,我们就可以将DataFrame中的某一列转换为日期时间格式了。
问题的原因是,从0.15.0版本开始,可以使用`.dt`来访问日期组件,将列转换为日期格式。通过`df['dates'].dt.date`可以将日期转换为`datetime.date`对象,并保持为`object`数据类型。如果想保持数据类型为`datetime64`,可以使用`df['dates'].dt.normalize()`来将时间组件设置为午夜(`00:00:00`),只显示日期值。
解决方法是使用`.dt`访问器来转换日期组件,使用`df['dates'].dt.date`将日期转换为`datetime.date`对象,使用`df['dates'].dt.normalize()`将时间组件设置为午夜。
需要注意的是,只能将`.dt`访问器用于类似日期时间的值。如果想以MM-DD-YYYY格式格式化日期,可以使用`.strftime()`方法。