【问题标题】:Filter time in a dataframe using python使用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

谁能帮忙。提前致谢

【问题讨论】:

    标签: python python-3.x pandas numpy csv


    【解决方案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(...),但最好弄清楚数据发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2019-03-15
    • 2021-01-06
    • 2021-06-22
    • 2021-06-27
    • 2023-01-26
    相关资源
    最近更新 更多