我需要删除某一列中没有值或为“0”的所有行;空";:使用Python和Pandas

我需要删除某一列中没有值或为“0”的所有行;空";:使用Python和Pandas,python,pandas,dataframe,Python,Pandas,Dataframe,我需要删除某个列中没有值的所有行,即“null”。但问题是我不知道该列的名称。但是要知道这是第五列,所以我已经厌倦了使用一些iloc方法,比如“notna”和“notnull”(见下文)。我已经包括了我正在处理的数据类型的示例图像。我之所以尝试这样做,是因为在我的csv文件/数据框顶部有不同数量的垃圾行,我正试图清除这些行。但是每次的行数都不同,所以我不能使用只会删除某个已知数量的标题行的东西。这就是为什么我试图去除某个列中的所有空行,因为我知道它也会去除数据集顶部的所有垃圾行 这些是我尝试过的

我需要删除某个列中没有值的所有行,即“null”。但问题是我不知道该列的名称。但是要知道这是第五列,所以我已经厌倦了使用一些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列中的所有空行,以便只保留填充的列,并删除顶部的垃圾行:

看到这张桌子了吗


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

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

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

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

notna\u boolean\u index=df.iloc[:,4].notna()
df=df.loc[notna_boolean_index]#也可以省略布尔索引的“.loc”

您可以通过传递
na\u值来解析数据,然后执行
删除na
。要处理顶部的垃圾行,您可以在读取csv时使用
skiprows
。下面是可能帮助您实现上述目标的示例代码

阅读csv

df = pd.read_csv('/tmp/test.csv', na_values=['null'], keep_default_na=True, skiprows=3)
虽然我相信默认情况下null被作为na值,但是为了安全起见,您可以使用上面的值

然后,您可以基于列简单地删除na行

df.drop_na(subset=column_name)

您知道csv顶部有多少行是垃圾行吗?或者它是变化的?