【发布时间】:2021-04-20 23:35:44
【问题描述】:
我有一个包含数百行和列的数据框,并且想要删除所有 NaN。 不幸的是,所有列和所有行中都有 NaN。
df = df.dropna(how = "any")
因此会导致一个空的数据框。 我使用 while 循环迭代地删除具有阈值的列。
i = 0
while df.isna().sum().sum() != 0:
i += 0.01
df= df.dropna(thresh=(i * df.shape[0]), axis= 0)
df= df.dropna(thresh=(i * df.shape[1]), axis= 1)
这种贪心算法不止一种方式可以确定次优解决方案。
除了编写我自己的线性程序以最大程度地减少删除的数据之外,是否还有我不知道的内置功能?
我的目标是尽可能多地保留数据。
【问题讨论】:
-
您能解释一下为什么要使用 NaN 删除行和列吗?尤其是为什么保留一些少于给定数量的 NaN 的行和列是可以的?
-
长期目标是应用回归任务,其中算法无法处理 NaN 值。我也已经尝试过 .fillna(),但由于我的数据集中的 nan 数量众多,我担心潜在的质量损失。关于你的第二个问题。我不太明白你的意思。当 while 循环离开时,没有剩下的 NaN。