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表示True
或False
,而不是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函数删除dataframe中列缺失值的个数大于某一比例阈值的数据列
pandas使用dropna函数删除dataframe中列非缺失值的个数小于某一比例阈值的数据列
pandas使用dropna函数删除dataframe中所有包含缺失值的数据行(drop rows which contain missing vlaues in dataframe)