如何在不考虑行的特定部分的情况下删除部分包含 Nan 值的行?

How to remove rows that include partially Nan values without taking specific part of the row into account?

我正在处理多个大数据框架。我想自动删除他们的 NaN 部分以简化数据清理过程。数据是从相机或雷达馈送中收集的,但我需要的部分数据是特定物体何时进入相机/雷达的视界。因此,数据文件(框架)如下所示,并且有很多 NaN 值:

    total in seconds    datetime(utc)   channels    AlviraPotentialDronePlots_timestamp AlviraPotentialDronPlot_id  ...
0   1601381457  2020-09-29 12:10:57 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1   1601381459  2020-09-29 12:10:59 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2   1601381460  2020-09-29 12:11:00 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3   1601381461  2020-09-29 12:11:01 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4   1601381463  2020-09-29 12:11:03 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... Useful data is here ... ... ... ... ... ... ... ... ...
623 1601382249  2020-09-29 12:24:09 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
624 1601382250  2020-09-29 12:24:10 NaN NaN NaN NaN NaN NaN NaN NaN ... 51.521264   5.858627    5.0 NaN NaN SearchRadar 0.0 0.0 NaN NaN
625 1601382251  2020-09-29 12:24:11 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

我已经使用以下方法删除了包含所有 NaN 值的列:

df = df.dropna(axis=1, how='all')

现在,我想删除包含所有 NaN 的行。但是,由于 total in secondsdatetime(utc) 始终存在于文件中,我无法使用以下命令:

df = df.dropna(axis=0, how='all')

此外,我不能使用 how='any',因为那样也会删除部分有用的数据(有用的数据包含一些 NaN 值,我稍后会填充这些值)。我必须以不考虑 total in secondsdatetime(utc) 的方式使用 dropna(),但如果所有其他字段都是 NaN,则删除整行。

我最接近解决这个问题的是中提到的命令,但我想我对Python还不够熟悉,无法制定以下逻辑:

我也尝试用 for 循环 写这个,但我没有成功。有人可以帮我解决这个问题吗?

提前致谢。

您可以通过 subset 参数和 Index.difference:

检查所有没有 total in secondsdatetime(utc) 的列
cols = ['total in seconds','datetime(utc)']
checked = df.columns.difference(cols)

df = df.dropna(subset=checked, how='all')

如果你的列数是固定的,你可以使用参数thresh。 假设您有 50 列,如果您有 2 列从不为空,则可以将阈值设置为 48。 有关更多信息,请查看 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.dropna.html