2016-12-25 3 views
2

Я пытаюсь использовать функцию dropna в пандах. Я хотел бы использовать его для определенного столбца.удалить все строки после первого появления NaN в определенной колонке (pandas)

Я могу только выяснить, как использовать его, чтобы сбросить NaN, если ВСЕ строки имеют ВСЕ значения NaN.

У меня есть dataframe (см ниже), что я хотел бы удалить все строки после первого вхождения в качестве NaN в конкретной колонка, колонке «А»

текущий код, работает только тогда, когда все строки значениями являются NaN.

data.dropna(axis = 0, how = 'all') 
data 

Оригинал Dataframe

data = pd.DataFrame({"A": (1,2,3,4,5,6,7,"NaN","NaN","NaN"),"B": (1,2,3,4,5,6,7,"NaN","9","10"),"C": range(10)}) 
    data 


    A B C 
0 1 1 0 
1 2 2 1 
2 3 3 2 
3 4 4 3 
4 5 5 4 
5 6 6 5 
6 7 7 6 
7 NaN NaN 7 
8 NaN 9 8 
9 NaN 10 9 

То, что я хотел бы выход выглядеть следующим образом:

A B C 
0 1 1 0 
1 2 2 1 
2 3 3 2 
3 4 4 3 
4 5 5 4 
5 6 6 5 
6 7 7 6 

Любая помощь по этому вопросу ценится. Очевидно, что я хотел бы сделать это самым чистым способом.

Спасибо!

ответ

5

использование iloc + argmax

data.iloc[:data.A.isnull().values.argmax()] 

    A B C 
0 1.0 1 0 
1 2.0 2 1 
2 3.0 3 2 
3 4.0 4 3 
4 5.0 5 4 
5 6.0 6 5 
6 7.0 7 6 

или с другим синтаксисом

top_data = data[:data['A'].isnull().argmax()] 
+0

@MaxU почти, что зависит от индекса будучи хорошо упорядоченные Интс. Я исправил это по-другому. – piRSquared

+0

можете ли вы пойти быстрее здесь? http://stackoverflow.com/questions/41318942/mask-out-specific-values-from-an-array – MYGz

+0

Что случилось с loc + idxmax? Также я думаю, что вам не нужны '.values',' Series' также имеет метод 'argmax'. – ayhan