首页 > 解决方案 > 如果数据类型是“时间戳”,我们可以过滤掉 z-score <-3 或 >3 的记录吗?

问题描述

我正在尝试用 z-score +- 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 个字段,特别是具有时间戳作为数据类型的字段。关于如何进行的任何想法?

标签: pythonpython-3.xdataframeoutliers

解决方案


推荐阅读