Pandas 和 DateTime TypeError:无法将 TimedeltaIndex 与浮点类型进行比较
Posted
技术标签:
【中文标题】Pandas 和 DateTime TypeError:无法将 TimedeltaIndex 与浮点类型进行比较【英文标题】:Pandas and DateTime TypeError: cannot compare a TimedeltaIndex with type float 【发布时间】: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 < timedelta(days=1))
。除非隐式强制转换,否则您无法跨类型进行比较
【参考方案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 分钟的时间增量。
【讨论】:
以上是关于Pandas 和 DateTime TypeError:无法将 TimedeltaIndex 与浮点类型进行比较的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas:当日期小于 13 时,pandas.to_datetime() 正在切换日期和月份
在 datetime 和 Pandas Timestamp 对象之间转换