如何在特定条件下删除熊猫中的行

时间:2019-05-03 07:17:31

标签: python pandas numpy

我正在尝试从pandas变量中删除行。

为此,我创建了一个函数来分析我的熊猫表中的2列。当此函数识别出一个单元格为空时,该函数应删除该行。

我尝试了以下代码:

def removeNaN(df):

    row,colum=df.shape

    for index in range(0,row):

        if df.Signal.iloc[index]==np.NaN or df.results.iloc[index]==np.NaN:

            df.drop(df.index[index],inplace=True)



    return df 

我的原始文件的尺寸为[37057行x 11列]:

      Unnamed: 0      created_at    ...           Signal   results
0               0  03.12.18 17:31    ...           NaN       NaN
1               1  03.12.18 17:32    ...      0.000000 -0.004039
2               2  03.12.18 17:33    ...      0.000000 -0.003910
3               3  03.12.18 17:34    ...      0.000000 -0.003297
...           ...      ...           ...         ...       ...

将变量放入函数后,我得到的表完全相同[37057行x 11列]:

      Unnamed: 0      created_at    ...           Signal   results
0               0  03.12.18 17:31    ...           NaN       NaN
1               1  03.12.18 17:32    ...      0.000000 -0.004039
2               2  03.12.18 17:33    ...      0.000000 -0.003910
3               3  03.12.18 17:34    ...      0.000000 -0.003297
...           ...      ...           ...         ...       ...

我期望这样的结果:[?????行x 11列]:

      Unnamed: 0      created_at    ...           Signal   results
1               1  03.12.18 17:32    ...      0.000000 -0.004039
2               2  03.12.18 17:33    ...      0.000000 -0.003910
3               3  03.12.18 17:34    ...      0.000000 -0.003297
...           ...      ...           ...         ...       ...

有人可以帮助我识别我的错误吗?

3 个答案:

答案 0 :(得分:1)

如果我正确理解,当两个特定列中至少有一个为“无/空”时,您想删除行。

在熊猫中很简单,有一种叫做dropna的方法

df.dropna(subset=["Signal", "results"], inplace=True)

此处的子集是您要考虑的列。

答案 1 :(得分:1)

完成所需目标的最简单方法是:

df.drop(df[df.Signal.isnull() | df.results.isnull()].index, inplace=True)

答案 2 :(得分:0)

简单方法:

  

df.dropna(subset = ['Signal','results'],axis = 0)