Python通过删除DateTime列来实现
在包含间歇NaT值的数据帧上使用groupby.median()和groupby.mean()时遇到一些问题。具体来说,我在一个数据集中有几个列,根据其他列计算各种时间差。在某些情况下,不存在时间差,导致NaT值与以下示例类似:Python通过删除DateTime列来实现,python,datetime,pandas,nat,Python,Datetime,Pandas,Nat,在包含间歇NaT值的数据帧上使用groupby.median()和groupby.mean()时遇到一些问题。具体来说,我在一个数据集中有几个列,根据其他列计算各种时间差。在某些情况下,不存在时间差,导致NaT值与以下示例类似: Group Category Start Time End Time Time Diff A 1 08:00:00.000 08:00:00.500 .500 B 1
Group Category Start Time End Time Time Diff
A 1 08:00:00.000 08:00:00.500 .500
B 1 09:00:00.000 09:02:00.000 2:00.000
B 1 09:00:00.000 NaT NaT
A 2 09:00:00.000 09:02:00.000 2:00.000
A 2 09:00:00.000 09:01:00.000 1:00.000
A 2 08:00:00.000 08:00:01.500 1.500
每当我运行df.groupby(['Group','Category'].median()
或.mean()
时,包含NaT的任何列都会从结果集中删除。我尝试了fillna
,但NaT似乎仍然存在。作为上下文的补充,此脚本在较早版本的Anaconda Python(1.x)中正常工作.我最近能够将我的工作计算机升级到2.0.1,从那时起,这个问题开始蔓延
编辑:如果NaT是一个因素,我会把我对NaT的想法放在上面,但经过进一步审查,我的问题实际上在于这些列是timedelta64s。有人知道获得TimeDelta平均值/中值的任何解决方法吗
非常感谢您提供的任何见解!在进一步的谷歌搜索/实验之后,我确认问题似乎与
timedelta64
列有关。为了对这些列执行pd.groupby
,我首先将它们转换为浮点数,如下所示:
df['End Time']=df['End Time'].astype('timedelta64[ms]')/86400000
也许有一个更优雅的解决方案,但这让我能够继续我的分析
谢谢!您有什么版本的熊猫?@joris我有熊猫0.14.0。我确实想出了一个解决办法-请参阅下面的回复。这确实是熊猫的当前限制,有一个问题需要解决(),希望它将进入版本0。15@joris太好了,谢谢你传递链接。我会关注这个问题。非常感谢