Pandas: 基于阈值条件删除列
Pandas: 基于阈值条件删除列
我必须解决这个问题:\n目标:删除大部分行缺失的列\n输入:\n1. 数据框 df:Pandas 数据框\n2. 阈值:确定将删除哪些列。如果阈值为0.9,则将删除缺失值达到90%的列\n输出:\n1. 删除列的数据框 df(如果没有删除列,则返回相同的数据框)\nExcel 文档截图\n我已经编写了以下代码:\n
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)
\n我必须使用 \"self、dr 和 threshold\",不能添加更多内容。代码必须通过以下测试案例:\n
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()
\n当我运行 VT.drop_nan_col(df, 0.9).head() 时,我不能更改这行代码,我得到以下错误:\n
KeyError: "['yls'] not found in axis"
\n如果我将 shape 改为 0 而不是 1,我认为这对于我正在做的不正确,我得到以下错误:\n
IndexError: tuple index out of range
\n有人可以帮我理解如何修复这个问题吗?
Pandas: Remove Column Based on Threshold Criteria
在使用Pandas处理数据时,有时候需要根据一定的阈值条件来删除某些列。然而,在实际操作中可能会遇到一些问题,下面我们来看看具体的原因以及解决方法。
在给定的代码中,我们可以看到一行代码df = df.drop(i)
,这是为了删除某一行数据。然而,根据问题的描述,我们需要删除的是列而不是行。因此,正确的代码应该是df = df.drop(i, axis=1)
,其中axis=1表示按列删除。
为了更好地理解这个错误,我们可以参考一个Stack Overflow上的答案https://stackoverflow.com/a/44931865/5184851。这个答案与我们遇到的问题类似,它提供了正确的解决方案。
此外,为了正确使用.head()
函数,drop_nan_col(...)
函数需要返回一个DataFrame而不是其他类型的对象。具体来说,应该返回df
。
在尝试了上述解决方法后,我们可能会遇到另一个错误:AttributeError: 'NoneType' object has no attribute 'head'
。这是一个不同的错误,可能与我们没有正确返回DataFrame对象有关。
通过检查更新后的答案,我们可能会找到解决这个问题的线索。请参考最新的答案以获得更多帮助。
通过这篇文章,我们了解到了在使用Pandas删除某些列时可能遇到的问题以及相应的解决方法。希望这些信息对你有所帮助!