我有一个带有间歇性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的评论
答案 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