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(最近调用最后)以上是关于Pandas:根据阈值标准删除列的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用dropna函数删除dataframe中列非缺失值的个数小于某一比例阈值的数据列
pandas使用dataframe中的两列时间对象数据列作差生成时间差数据列筛选dataframe数据中时间差大于指定阈值的数据行(时间差timedelta大于指定阈值的样本数据)
pandas筛选dataframe数据:指定字符串数据列的长度超过某一固定阈值的所有数据行
pandas筛选dataframe数据:指定一个数据列的值不等于某个固定值,而且另外一个数据列的值大于某一阈值
pandas筛选dataframe数据:筛选一个数据列的内容等于某一固定值,而且另一数据列的数值大于固定阈值的所有数据行
pandas筛选dataframe数据:筛选一个数据列的内容等于某一固定值,而且另一数据列的数值大于固定阈值的所有数据行