Pandas:删除数据框

时间:2015-08-26 19:33:37

标签: python numpy pandas dataframe

我有一个带有间歇性NaN值的Pandas Dataframe:

Index       Col1     Col2      Col3    Col4  Col5  Col6  Col7  Col8 
1991-12-31  100.000  100.000    NaN     NaN   NaN   NaN   NaN   NaN                     
1992-01-31   98.300  101.530    NaN     NaN   NaN   NaN   NaN   NaN                     
1992-02-29   97.602  100.230   98.713   NaN   NaN   NaN   NaN   NaN                     
1992-03-31   93.473    NaN    102.060   NaN   NaN   NaN   NaN   NaN                     
1992-04-30   94.529  102.205  107.755   NaN   NaN   NaN   NaN   NaN

我想丢弃6个NaN或更多的前导行。具体来说,在这种情况下,我只想放弃指数' 1991-12-31'和' 1992-01-31'。

使用df.dropna(thresh = 6)并不起作用,因为它会删除行' 1992-03-31'同样。

一种解决方案是计算每行中的NaN,并在NaN数小于6时停在第一行。

任何更快/更清洁的解决方案?

编辑:为了清晰起见而编辑@ Alexander的评论

1 个答案:

答案 0 :(得分:0)

假设名为Index的列实际上是索引,您可以计算每行中的空值数,并选择那些大于阈值的值。如果返回任何一个,则删除第一个(即前导行)。

idx = df[df.isnull().sum(axis=1) <= 5].index
if len(idx) > 0:
    df = df.ix[idx[0]:]

>>> df
              Col1     Col2     Col3  Col4  Col5  Col6  Col7  Col8
Index                                                             
1992-02-29  97.602  100.230   98.713   NaN   NaN   NaN   NaN   NaN
1992-03-31  93.473      NaN  102.060   NaN   NaN   NaN   NaN   NaN
1992-04-30  94.529  102.205  107.755   NaN   NaN   NaN   NaN   NaN