代码之家  ›  专栏  ›  技术社区  ›  ASH

如果数据类型是“timestamp”,我们可以过滤掉z-score>3的记录吗?

  •  0
  • ASH  · 技术社区  · 4 年前

    我试图淘汰任何/所有z分数为+-3的记录。我正在测试下面的代码。

    from scipy import stats
    import numpy as np
    z = np.abs(stats.zscore(df))
    print(z)
    
    # detect and remove outliers
    df_filtered = df
    [(z < 3).all(axis=1)]
    

    任务应该很简单,但显然,如果数据帧中有带有时间戳的字段,事情就会被抛出。这行代码抛出错误。

    z = np.abs(stats.zscore(df))
    

    错误:

    TypeError: unsupported operand type(s) for +: 'Timestamp' and 'Timestamp'
    

    数据如下: datetime64[ns]

    这里是这个特定数据的一个小样本。

    0    2021-01-16 06:10:11
    1    2021-01-16 06:10:11
    2    2021-01-16 06:10:11
    3    2021-01-16 06:10:11
    4    2021-01-16 06:10:11
    5    2021-01-16 06:10:11
    

    我只是在寻找一个基本的解决方案来同时测试数据帧中的所有字段。如果这不可能,我可以更改代码,只查看4个字段,具体来说,这些字段具有时间戳作为数据类型。对如何进行有什么想法吗?

    0 回复  |  直到 4 年前