2017-05-10 98 views
1

为了比较起见,Pandas如何存储漂浮物?我跑了一个简单的检查值,它返回了我的预期,但结果与我的查询/比较不一样:熊猫漂浮比较

为什么每个时间点的值都不一样?

我试着重新运行这个,先把这个列转换成int然后比较结果什么都没有。

+0

你知道大多数浮点运算如何涉及舍入吗?这甚至包括整数到浮点数的转换。你的int变圆了。 – user2357112

+0

不使用浮点时间戳。使用int64(这就是熊猫如何在时间戳下存储时间戳)。 –

回答

0

你漂浮在纪元以来毫微秒,所以要转换试试这个:

代码;

df.time = df.time.astype('datetime64[ns]') 

测试代码:

df = pd.DataFrame([1484314274417920512., 1484314274417620224.], 
        columns=['time']) 
print(df) 

df.time = df.time.astype('datetime64[ns]') 
print(df) 

结果:

  time 
0 1.484314e+18 
1 1.484314e+18 
          time 
0 2017-01-13 13:31:14.417920512 
1 2017-01-13 13:31:14.417620224 

但是:

当您从原始数据源进行转换时,问题很可能出现。将int64转换为float64已经失去了一些精度,所以将它转换为纳秒,可能仍然不能满足你的需求。有些事情可以做到:

  1. 直接执行原始转换为int64,以免失去精度。

  2. 如果不需要纳秒,则将时间戳四舍五入到微秒或毫秒。

+0

事情是我一行一行地填充我的数据框,时间来自我的数据源作为一个int,但熊猫因为某种原因强制它浮动,无论我尝试什么。我试过np.int64(),长(),什么也没有。两个熊猫都返回float64。 – guy

+0

发现了这个问题,我用'.loc'逐行填充我的数据框,它强制所有的数值都是'float64'类型,无论我的值是整数。我的解决方法是将这些整数转换为字符串,因此大熊猫会将它们留在一起,然后使用'.type(int) – guy