【问题标题】:how to drop pandas df columns whose variance is in a tolerance rank?如何删除方差在容差范围内的 pandas df 列?
【发布时间】:2021-11-09 02:38:37
【问题描述】:

假设下一个df:

d={'month': ['01/01/2020', '01/02/2020', '01/03/2020', '01/01/2020', '01/02/2020', '01/03/2020'], 
   'country': ['Japan', 'Japan', 'Japan', 'Poland', 'Poland', 'Poland'], 
   'level':['A01', 'A01', 'A01', 'A00','A00', 'A00'],
   'job title':['Insights Manager', 'Insights Manager', 'Insights Manager', 'Sales Director', 'Sales Director', 'Sales Director'],
   'number':[0, 0.001, 0, 0, 0, 0],
   'age':[24, 22, 45, 38, 60, 32]}


df=pd.DataFrame(d)

当尝试获取所有列的方差时,会出现下一个结果:

import pandas as pd

df.agg("var")

结果:

number    1.666667e-07
age       2.025667e+02
dtype: float64

这个想法是删除处于某个等级的列,例如,如果列方差则将其删除 在00.0001 之间的排名,(即:删除number 列,因为它的方差在此排名内)。

当尝试这样做时:

df= df.loc[:, 0 < df.std() < .0001]

出现下一个错误:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

是否可以删除方差在容差范围内的 pandas df 列?

【问题讨论】:

    标签: python pandas dataframe machine-learning


    【解决方案1】:

    另一种解决方案(使用.between + .drop(columns=...)

    var = df.agg("var", numeric_only=True)
    df = df.drop(columns=var[var.between(0, 0.0001)].index)
    print(df)
    

    打印:

            month country level         job title  age
    0  01/01/2020   Japan   A01  Insights Manager   24
    1  01/02/2020   Japan   A01  Insights Manager   22
    2  01/03/2020   Japan   A01  Insights Manager   45
    3  01/01/2020  Poland   A00    Sales Director   38
    4  01/02/2020  Poland   A00    Sales Director   60
    5  01/03/2020  Poland   A00    Sales Director   32
    

    【讨论】:

      【解决方案2】:

      您不能在 pandas 系列中使用链式比较运算符,因为在幕后,它们被转换为 and,它只适用于标量。改用矢量化&amp;

      df[(((v := df.var()) > 0) & (v < 0.0001))[lambda x: x].index]
      
         number
      0   0.000
      1   0.001
      2   0.000
      3   0.000
      4   0.000
      5   0.000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 2020-12-11
        • 2021-09-26
        • 1970-01-01
        相关资源
        最近更新 更多