python中的代码“df.dropna”擦除了我的整个数据框,我的代码有啥问题?

Posted

技术标签:

【中文标题】python中的代码“df.dropna”擦除了我的整个数据框,我的代码有啥问题?【英文标题】:The code "df.dropna" in python erases my entire data frame, what is wrong with my code?python中的代码“df.dropna”擦除了我的整个数据框,我的代码有什么问题? 【发布时间】:2019-08-25 03:49:23 【问题描述】:

我想将所有 NaN 变量放在我的一列中,但是当我使用 df.dropna(axis=0, inplace=True) 时,它会擦除​​我的整个数据框。为什么会这样?

df.dropnadf.dropna(axis=0, inplace=True) 我都用过,去掉 NaN 也没用。

我正在对我的数据进行分箱,以便我可以运行高斯模型,但我无法使用 NaN 变量执行此操作,我想删除它们并且仍然有我的数据框来运行模型。

之前和之后

【问题讨论】:

您能否发布原始数据、重新创建 df 的代码以及产生错误结果的代码。请注意,只需从一列中删除NaN,您就可以执行df['Col'] = df['Col'].dropna(),您所写的是删除包含任何NaN 的行,这意味着如果您的所有行至少包含1 个NaN,那么整个df将被删除 尝试df.dropna(how='all',axis=0, inplace=True),如果你不使用所有,它将删除所有具有NaN的行 听起来你在某列的每一行都有一个 NaN。除了 anky_91 所说的,您还可以让 dropna 只查看列(或行)的子集。所以 df = df.dropna(subset=["col1_name"]) 它只会删除该列中具有 NaN 值的行。pandas.pydata.org/pandas-docs/stable/reference/api/… @EdChum 我已经分享了之前和之后的数据集 @pramire1 你想在这里实现什么? dropna() 将删除所有行,因为每行中的一列或另一列是 nan 【参考方案1】:

不确定您的案例,但分享适用于我的案例的解决方案:

那些没用的:

df = df.dropna() #==> make the df empty.
df = df.dropna(axis=0, inplace=True) #==> make the df empty.
df.dropna(axis=0, inplace=True) #==> make the df empty.

成功的那个:

df.dropna(how='all',axis=0, inplace=True) #==> Worked very well...

感谢上面的 Anky 的评论。

【讨论】:

【参考方案2】:

默认的 'dropna' 命令使用 'how=any' ,这意味着它将删除具有 'any' NaN 的每一行

正如您所发现的,这会删除具有“所有”NaN 列的行

df.dropna(how='all', inplace=True)

或者,更基本的:

newDF = df.dropna(how='all')

【讨论】:

以上是关于python中的代码“df.dropna”擦除了我的整个数据框,我的代码有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

Python 中处理缺失值的 2 种方法

从数据框中删除不包括一组列的列中的nan行。

当.dropna()为它们留下不同的大小时,处理两个数据集的正确方法是什么?

时间序列

安全擦除内存中的密码 (Python)

当我的程序“无响应”时,为啥我的paintBox Canvas 被擦除了?