首页 > 解决方案 > 我需要删除某个列中没有值或为“null”的所有行:使用 Python 和 Pandas

问题描述

我需要删除某个列中没有值的所有行,即它是“null”的地方。但问题是我不知道列的名称。但是知道它是第 5 列,所以我已经厌倦了使用一些 iloc 方法,如“notna”和“notnull”(见下文)。我已经包含了我正在使用的数据类型的示例图像。我试图这样做的原因是因为在我试图摆脱的 csv 文件/数据框的顶部有不同数量的垃圾行。但是每次的行数都不同,所以我不能使用只会删除某个已知数量的标题行的东西。这就是为什么我试图删除某个列中的所有空行,因为我知道它也会删除我数据集顶部的所有垃圾行。

这些是我尝试使用的一些方法,但没有奏效。

df = df[df[df.iloc[:, 4]].notna()]

df = df[pd.notnull(df[df.iloc[:, 4])]

df = df.dropna(subset=[df.iloc[:, 5]])

因此,例如,在此图像中,我试图删除第 5 列(日期列)为空但列名称不是“日期”的所有行,因为顶部有垃圾行。我正在尝试删除第 5 列中的所有空行,以便只保留填充的列,并消除顶部的垃圾行:

请参阅此处的表格

在此处输入图像描述

标签: pythonpandasdataframe

解决方案


您的前两个版本有一个额外的df[]. 您可以使用:

df = df[df.iloc[:, 4].notna()]

或者:

df = df[pd.notnull(df.iloc[:, 4])]

为了更明确地分解它,这些使用布尔索引。例如,第一个用于df.iloc[:, 4].notna()获取布尔索引,notna然后df使用它进行过滤:

notna_boolean_index = df.iloc[:, 4].notna()
df = df.loc[notna_boolean_index] # can also leave out `.loc` for boolean indexes

推荐阅读