Pandas:根据阈值标准删除列

Posted

技术标签:

【中文标题】Pandas:根据阈值标准删除列【英文标题】:Pandas: Remove Column Based on Threshold Criteria 【发布时间】:2020-03-09 06:39:49 【问题描述】:

我必须解决这个问题: 目标:删除大部分行缺失的列 输入: 1. Dataframe df:Pandas 数据框 2. 阈值:确定将丢弃哪些列。如果阈值为 0.9,则将删除具有 90% 缺失值的列 输出: 1. 删除列的Dataframe df(如果没有删除列,则返回相同的DataFrame)

Excel Doc Screenshot

我已经编码了这个:

class variableTreatment():

    def drop_nan_col(self, df, threshold): 

        self.threshold = threshold
        self.df = df
        for i in df.columns:
            if (float(df[i].isnull().sum())/df[i].shape[0]) > threshold:
                df = df.drop(i)

我必须拥有“自我、博士和门槛”,不能再添加更多。代码必须通过以下测试用例:

import pandas as pd
import numpy as np
df = pd.read_excel('CKD.xlsx')

VT = variableTreatment()

VT

VT.drop_nan_col(df, 0.9).head()

当我运行 VT.drop_nan_col(df, 0.9).head() 时,我无法更改这行代码,我得到:

KeyError: "['yls'] not found in axis"

如果我将形状更改为 0 而不是 1,我认为这对我正在做的事情不正确,我得到:

IndexError: tuple index out of range

谁能帮助我了解如何解决这个问题?

【问题讨论】:

【参考方案1】:

我认为你需要改变

df = df.drop(i)

df = df.drop(i, axis=1)

因此,您考虑的是列而不是行,这是默认选项。看到这里同样的错误https://***.com/a/44931865/5184851

另外,要使用.head(),函数drop_nan_col(...)需要返回数据帧,即df

【讨论】:

我也试过了,得到了这个:------------------------------- -------------------------------------------- AttributeError Traceback(最近调用最后) in ----> 1 VT.drop_nan_col(df, 0.9).head() AttributeError: 'NoneType' object has no attribute 'head' 这是一个不同的错误,我认为这与您没有返回数据帧 df 的事实有关。如果有帮助,请查看我的更新答案。

以上是关于Pandas:根据阈值标准删除列的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用dropna函数删除dataframe中列非缺失值的个数小于某一比例阈值的数据列

pandas使用dataframe中的两列时间对象数据列作差生成时间差数据列筛选dataframe数据中时间差大于指定阈值的数据行(时间差timedelta大于指定阈值的样本数据)

pandas筛选dataframe数据:指定字符串数据列的长度超过某一固定阈值的所有数据行

pandas筛选dataframe数据:指定一个数据列的值不等于某个固定值,而且另外一个数据列的值大于某一阈值

pandas筛选dataframe数据:筛选一个数据列的内容等于某一固定值,而且另一数据列的数值大于固定阈值的所有数据行

pandas筛选dataframe数据:筛选一个数据列的内容等于某一固定值,而且另一数据列的数值大于固定阈值的所有数据行