【问题标题】:Drop entire df where last row is nan - pandas删除最后一行是 nan 的整个 df - pandas
【发布时间】:2022-10-13 14:29:35
【问题描述】:

我想删除全部如果指定列的最后一行是 nan,则为行和列。目前,我只删除所有列的最后一行。

下面,如果Volume 中的最后一行是 nan,那么我想从每一列中删除所有行。如果 nan 出现在 df 的其他任何位置,则保持原样。

df = pd.DataFrame({'Datetime' : ['2022-10-10 01:44:00','2022-10-10 01:45:00','2022-10-10 01:46:00','2022-10-10 01:47:00','2022-10-10 01:48:00'],
                   'Val' : [0.97,0.97,0.95,0.93,0.96],
                   'Volume' : [0,0,np.NaN,0,np.NaN],
                  })

df2 = pd.DataFrame({'Datetime' : ['2022-10-10 01:44:00','2022-10-10 01:45:00','2022-10-10 01:46:00','2022-10-10 01:47:00','2022-10-10 01:48:00'],
                   'Val' : [0.97,0.97,0.95,0.93,0.96],
                   'Volume' : [0,0,np.NaN,0,np.NaN],
                  })

df = df.loc[:df['Volume'].last_valid_index()]

print(df)

出去:

              Datetime   Val  Volume
0  2022-10-10 01:44:00  0.97     0.0
1  2022-10-10 01:45:00  0.97     0.0
2  2022-10-10 01:46:00  0.95     NaN
3  2022-10-10 01:47:00  0.93     0.0

预期输出:

Empty DataFrame
Columns: []
Index: []

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    利用:

    df = pd.DataFrame() if pd.isna(df['Volume'].iat[-1]) else df
    print (df)
    Empty DataFrame
    Columns: []
    Index: []
    

    【讨论】:

    • 谢谢。但这不适用于df2。只有最后一行是nan。没有任何行
    • @Chopin - 和df 一样,我也只测试列df['Volume']
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2018-11-26
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多