使用python过滤数据框中的时间

Posted

技术标签:

【中文标题】使用python过滤数据框中的时间【英文标题】:Filter time in a dataframe using python 【发布时间】:2022-01-22 12:32:10 【问题描述】:

我有一个只有时间的专栏。阅读该 CSV 文件后,我将该列转换为 datetime 数据类型,因为当我在 jupyter notebook 中阅读它时它是对象。当我尝试过滤时,出现如下错误

TypeError: Index must be DatetimeIndex

代码

newdata = newdata['APPOINTMENT_TIME'].between_time('14:30:00', '20:00:00')

样本数据

APPOINTMENT_TIME Id
13:30:00    1
15:10:00    2
18:50:00    3
14:10:00    4
14:00:00    5

我在这里尝试显示约会时间在 14:30:00 到 20:00:00 之间的行 datatype info

谁能帮忙。提前致谢

【问题讨论】:

【参考方案1】:

between_time 是一种特殊的方法,它使用日期时间对象作为索引,这不是你的情况。如果你有像2021-12-21 13:30:00这样的数据会很有用

在您的情况下,您可以只对字符串使用 between 方法,并且您的格式 HH:MM:SS 的时间将自然排序:

filtered_data = newdata[newdata['APPOINTMENT_TIME'].between('14:30:00', '20:00:00')]

输出:

  APPOINTMENT_TIME  Id
1         15:10:00   2
2         18:50:00   3

注意。您不能使用从午夜之前开始到午夜之后结束的范围。

【讨论】:

我试过你的代码并得到错误TypeError: '>=' not supported between instances of 'datetime.time' and 'str'。该列的数据类型是对象。你能帮忙吗? 看起来你有一个日期时间(或混合)类型。您能否提供具有正确类型的可重现数据框? 我在主要问题中添加了关于数据类型的内容。你能检查一下吗 检查您的专栏,您可能混合了日期时间类型和其他类型(无、字符串...)。一个(肮脏的)选项是使用newdata['APPOINTMENT_TIME'].astype(str).between(...),但最好弄清楚数据发生了什么。

以上是关于使用python过滤数据框中的时间的主要内容,如果未能解决你的问题,请参考以下文章

根据条件过滤数据框中的数据

过滤数据框中的值

如何使用过滤器从scala中的数据框中获取包含空值的行集

过滤pySpark数据框中的日期列记录

根据列中的条件对数据框中的行进行子集/过滤

如何通过 Pyspark 中同一数据框中另一列的正则表达式值过滤数据框中的一列