如何选择包含多个时间的日期的数据帧中特定日期的所有行?

11 浏览
0 Comments

如何选择包含多个时间的日期的数据帧中特定日期的所有行?

我使用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

问题的出现原因是,DataFrame中有一个包含多个时间的日期时间列,需要选择所有特定日期的行。原始答案使用了python的datetime对象,但是这种方法效率较低,因为操作不是向量化的。因此,需要找到一种更高效的解决方法。

解决方法是使用df['dates'].dt.floor('d')来选择特定日期的行。虽然这个方法并不是真正地"只保留日期部分",而是将时间设置为'00:00:00',但是在一些操作中可以达到与原始问题相同的效果,比如打印到屏幕、保存为csv文件、使用该列进行分组等。而且这种方法更高效,因为操作是向量化的。

编辑补充了一个更好的答案,即"最新版本的pandas不会在csv中写入时间,如果所有观测值的时间都是'00:00:00'"。然而,to_json仍然会写入完整的'00:00:00'。这种方法比dt.normalize()在长度超过几百个元素的系列上更快。在超过100万行的DataFrame上,这种方法比我找到的其他选项更快,只有normalize稍微慢一些。此外,保持日期的pandas本地格式意味着可以将其保存到hdf存储中(自pandas 1.1.4以来,datetime.date列不能保存到hdf存储中)。

0
0 Comments

问题原因:

根据提供的问题描述,问题的原因是需要从一个包含日期时间列的数据框中选择特定日期的所有行,而该日期可能有多个时间。

解决方法:

一个简单的解决方法是将日期时间列转换为只包含日期的列,然后根据特定日期选择所有行。以下是实现这个解决方法的代码:

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

需要注意的是,这会改变数据列的类型为对象。如果要保持一致性,需要使用astype('datetime64')将其转换回datetime类型。

以上是解决该问题的简单方法。通过将日期时间列转换为只包含日期的列,然后根据特定日期选择所有行,可以轻松地实现从数据框中选择特定日期的所有行的需求。

0
0 Comments

问题的出现原因是在一个包含多个日期时间的dataframe中,如何选择特定日期的所有行。解决方法是使用`.dt`来访问日期组件,并将日期组件提取出来。具体操作是给dataframe添加一个新的列,该列的值为日期组件。如果想保持该列的数据类型为`datetime64`,可以使用`.normalize()`方法将时间组件设置为午夜,即`00:00:00`。

自从版本0.15.0以来,可以轻松地使用`.dt`来访问日期组件:

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

上面的代码返回`datetime.date`,因此数据类型是`object`。如果想保持数据类型为`datetime64`,可以使用`.normalize()`方法:

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

这将把时间组件设置为午夜,即`00:00:00`,但显示时只显示日期值。

在此过程中,还提到了一些相关的方法:

- `pandas.Series.dt`:用于访问日期时间组件的属性和方法。

- 只能使用`.dt`来访问日期时间值。

另外,还有一个问题是如何以MM-DD-YYYY的格式显示日期,但在给出的内容中并没有提供解决方法。

0