Apply功能适用于除最后一行以外的所有行

时间:2019-11-30 00:44:28

标签: python pandas

下面的代码创建了一个函数,该函数可以正确删除具有0值的所有行。
但是,我希望此函数适用于所有行,除了df中的最后一行。
如何调整此功能?

def read_df(file):
    df = pd.read_csv(file, na_values=['', ' '])
    # Drop useless junk and fill empty values with zero 
    df = df.drop(['row_num','start_date','end_date','symbol'], axis=1).fillna(0)
    df=df[df!=0].dropna()
    return df

编辑:我想强调一下,如果最后一行不包含NA或零,则没有理由将行追加回去,因为从一开始就从未将其删除。只是在最后一行确实为零或不适用时重新添加最后一行。

目标是将以上函数(即删除0或NA)应用于最后一行之前的所有行。

2 个答案:

答案 0 :(得分:2)

由于对象在=(即)之前仍具有数据,因此您可以在删除na后通过切片来包含最后一行:

df=df[df!=0][:-1].dropna().append(df.iloc[-1])

当您在最后一列中包含非0数据时,[:-1]应该避免重复。

答案 1 :(得分:1)

使用代码,您只需要在没有最后一列的数据帧片段上进行比较,然后将最后一列附加到dropna的结果中

def read_df(file):
    df = pd.read_csv(file, na_values=['', ' '])
    # Drop useless junk and fill empty values with zero 
    df = df.drop(['row_num','start_date','end_date','symbol'], axis=1).fillna(0)
    df=df[df.iloc[:-1] != 0].dropna().append(df.iloc[-1])
    return df