dropna() 函数的问题和 dropna() 的替代方案

Posted

技术标签:

【中文标题】dropna() 函数的问题和 dropna() 的替代方案【英文标题】:Issue with dropna() function and alternatives to the dropna() 【发布时间】:2019-12-02 14:17:19 【问题描述】:

我正在学习在 Python 中使用 dropna() 函数,以删除包含 NaN/'?' 的行/列其中的价值观。但是,即使在网上看到各种解决方案后,尽管没有语法错误,我也无法删除数据。

我尝试了以下解决方案:

Pandas dropna() function not working我试过了,但数据框仍然没有改变。 Python Pandas dropna method这个方法给我一个语法错误

第一次尝试

df1 = df.dropna()
df1

继续

df1.dropna(inplace=1)
df1

代码的第一部分给了我原始数据框

第二部分给了我以下错误:

----------------------------------- ---------------------------- ValueError Traceback(最近一次调用 最后)在() ----> 1 df1.dropna(inplace=1) 2 3 df1

~\Anaconda3\lib\site-packages\pandas\core\frame.py 在 dropna(self, 轴,如何,阈值,子集,就地)4259 1 蝙蝠侠 蝙蝠车 1940-04-25 4260 """ -> 4261 inplace = validate_bool_kwarg(inplace, 'inplace') 4262 if isinstance(axis, (tuple, list)): 4263 # GH20987

~\Anaconda3\lib\site-packages\pandas\util_validators.py 在 validate_bool_kwarg(值,arg_name) 224 raise ValueError('对于参数 "arg" 预期类型 bool,收到' 第225章 --> 226 typ=type(value).name)) 227 返回值 228

ValueError: 对于参数“就地”预期类型 bool,接收类型

另外,有没有更好的替代 dropna() 函数的方法?


编辑 1

    链接到我的 Python 笔记本Dealing with Missing Data.ipynb 我试图将 inplace 的参数值更改为 True,但它给了我以下错误:

NameError:名称“df1”未定义

PS 所有错误和问题都在代码中可见

使用的 CSV 文件的链接 = CSV


【问题讨论】:

这意味着您实际上没有NaN 值,对于第二个错误,错误消息非常清楚,通过inplace=True,此外我们需要您的数据和代码来重现此 第二个错误可读性足够——预期类型bool表示TrueFalse,而不是1或0。至于为什么你的表没有改变,没有一个小示例表是不可能回答的.如果我不得不猜测,您可能认为“na”不是。 请提供minimal reproducible example,以便我们重现您的错误 我已经添加了代码和我遇到的错误 【参考方案1】:

您还应该在替换函数中添加inplace = True

df.replace("?", np.nan, inplace = True)

【讨论】:

【参考方案2】:

首先替换 ?与 nan,像这样:

df.replace('?', np.nan)

然后使用dropna 删除所有缺失值(您刚刚在上面替换的 nan,如下所示:

df1 = df.dropna()
df1

然后使用 inplace 将 DataFrame 与有效条目保持在同一个变量中,如下所示:

df1.dropna(inplace=True)
df1

【讨论】:

@user36160:太好了!如果它解决了您的问题,请不要忘记接受解决方案。

以上是关于dropna() 函数的问题和 dropna() 的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

pandas删除空数据行及列dropna()

Pandas dropna - 存储删除的行

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

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

pandas使用dropna函数删除dataframe中所有包含缺失值的数据行(drop rows which contain missing vlaues in dataframe)

pandas 处理缺失值[dropna、drop、fillna]