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")