【问题标题】:Pandas and DateTime TypeError: cannot compare a TimedeltaIndex with type floatPandas 和 DateTime TypeError:无法将 TimedeltaIndex 与浮点类型进行比较
【发布时间】:2019-03-27 03:19:00
【问题描述】:

我有一个 pandas DataFrame Series 时差,看起来像::

 print(delta_t)

 1       0 days 00:00:59
 3       0 days 00:04:22
 6       0 days 00:00:56
 8       0 days 00:01:21
 19      0 days 00:01:09
 22      0 days 00:00:36
 ...

(完整的 DataFrame 有一堆我丢弃的 NaN)。

我想知道哪些 delta_t 小于 1 天、1 小时、1 分钟, 所以我尝试了:

delta_t_lt1day = delta_t[np.where(delta_t < 30.)]

然后得到一个:

TypeError: cannot compare a TimedeltaIndex with type float

一点帮助?!?!

【问题讨论】:

  • 不应该是np.where(delta_t &lt; timedelta(days=1))。除非隐式强制转换,否则您无法跨类型进行比较

标签: python pandas datetime series


【解决方案1】:

假设您的系列采用timedelta 格式,您可以跳过np.where,并使用类似的方式进行索引,您可以使用适当的单位将实际值与其他时间增量进行比较:

delta_t_lt1day = delta_t[delta_t < pd.Timedelta(1,'D')]

delta_t_lt1hour = delta_t[delta_t < pd.Timedelta(1,'h')]

delta_t_lt1minute = delta_t[delta_t < pd.Timedelta(1,'m')]

您将获得以下系列:

>>> delta_t_lt1day
0
1    00:00:59
3    00:04:22
6    00:00:56
8    00:01:21
19   00:01:09
22   00:00:36
Name: 1, dtype: timedelta64[ns]
>>> delta_t_lt1hour
0
1    00:00:59
3    00:04:22
6    00:00:56
8    00:01:21
19   00:01:09
22   00:00:36
Name: 1, dtype: timedelta64[ns]
>>> delta_t_lt1minute
0
1    00:00:59
6    00:00:56
22   00:00:36
Name: 1, dtype: timedelta64[ns]

【讨论】:

    【解决方案2】:

    您可以使用TimeDelta 类:

    import pandas as pd
    
    deltas = pd.to_timedelta(['0 days 00:00:59',
                              '0 days 00:04:22',
                              '0 days 00:00:56',
                              '0 days 00:01:21',
                              '0 days 00:01:09',
                              '0 days 00:31:09',
                              '0 days 00:00:36'])
    
    for e in deltas[deltas < pd.Timedelta(value=30, unit='m')]:
        print(e)
    

    输出

    0 days 00:00:59
    0 days 00:04:22
    0 days 00:00:56
    0 days 00:01:21
    0 days 00:01:09
    0 days 00:00:36
    

    请注意,此过滤器会按预期过滤掉 '0 days 00:31:09'。表达式 pd.Timedelta(value=30, unit='m') 创建一个 30 分钟的时间增量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 2013-12-18
      • 2018-12-30
      • 2020-08-15
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      相关资源
      最近更新 更多