2016-02-23 7 views
2

У меня есть большой фрейм данных, который я хочу разбить, когда все столбцы наносятся или не имеют конечного значения. Я ищу что-то похожее на сообщение Drop rows of pandas dataframe that don't have finite values in certain variable(s), но вместо того, чтобы бросать, я бы хотел разбить на эти строки.Найти индекс строки для блока данных pandas, который не имеет конечных значений

Я в настоящее время на панд 0.16.0

+0

делает 'df [df.apply (лямбда x: x.isnull(). all(), axis = 1)]' work? – EdChum

+0

Также не 'df.dropna (how = 'all')' возвращает вас этому? – EdChum

+0

@EdChum абсолютно идеально подходит. Спасибо. dropna возвращает dataframe без nans, а не строк с nans. – dlwlrma

ответ

1

Это будет быстрее фильтровать непредоставлением NaN строки из вашего ФР, вызвав index.difference на индексных меток вернулись из dropna:

In [69]: 
df = pd.DataFrame({'a':[0,np.NaN, 0], 'b':[np.NaN, np.NaN, 1]}) 
df = pd.concat([df]*10000, ignore_index=True) 

%timeit df[df.apply(lambda x: x.isnull().all(), axis=1)] 
%timeit df.loc[df.index.difference(df.dropna(how='all').index)] 

1 loops, best of 3: 2.82 s per loop 
100 loops, best of 3: 8.95 ms per loop 

Вы можете видеть, что для 30К строк ФР, последний метод намного быстрее

1

Как @EdChum указал

df[df.apply(lambda x: x.isnull().all(), axis=1)] 

делает трюк.