Pandas:将列转换为日期时间格式

13 浏览
0 Comments

Pandas:将列转换为日期时间格式

我使用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的目的。是否有一种一次性转换整个列的方法?或者,pandas.to_datetime是否支持精度规范,以便在处理每日数据时去除时间部分?

0
0 Comments

问题的出现原因是:原始的解决方法虽然能够将列转换为日期格式,但是由于依赖于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存储中)。

0
0 Comments

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
0 Comments

问题的原因是,从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()`方法。

0