跳到内容

pandas-nunique-constant-series-check (PD101)

源自 pandas-vet linter。

作用

检查是否使用了 .nunique() 来检查 Pandas Series 是否为常数(即,仅包含一个唯一值)。

为什么这不好?

对于检查 Series 是否为常数,.nunique() 的计算效率低下。

例如,考虑一个长度为 n 的 Series,它由递增的整数值组成(例如,1、2、3、4)。 .nunique() 方法将迭代整个 Series 以计算唯一值的数量。但在这种情况下,我们可以在访问前两个不相等的值后检测到 Series 不是常数。

通常,.nunique() 需要迭代整个 Series,而更有效的方法允许在找到不相等的值时立即短路操作。

不要调用 .nunique(),而是将 Series 转换为 NumPy 数组,并检查数组中的所有值是否等于第一个观察到的值。

示例

import pandas as pd

data = pd.Series(range(1000))
if data.nunique() <= 1:
    print("Series is constant")

建议改为

import pandas as pd

data = pd.Series(range(1000))
array = data.to_numpy()
if array.shape[0] == 0 or (array[0] == array).all():
    print("Series is constant")

参考