Dask: сбросить NA на столбцы? - PullRequest
0 голосов
/ 17 октября 2018

Я попытался применить фильтр для удаления столбцов со слишком большим количеством NA в моем фрейме данных dask:

df.dropna(axis=1, how='all', thresh=round(len(df) * .8))

К сожалению, похоже, что API dask dropna немного отличается от API панд и делаетне принимать ни axis, ни threshold.Один частичный способ обойти это - перебирать столбец за столбцом и удалять постоянные (независимо от того, заполнены они NA или нет, так как я не против избавиться от констант):

    for col in df.columns:
        if len(df[col].unique()) == 1:
            new_df = df.drop(col, axis = 1)

Ноэто не позволяет мне применить порог.Я мог бы вычислить порог вручную, добавив:

elif sum(df[col].isnull().compute()) / len(df[col]) > 0.8:
    new_df = df.drop(col, axis = 1)

Но я не уверен, что вызовы compute и len в этот момент были бы оптимальными, и мне было бы интересно узнать, есть ли какие-либо лучшеспособы пойти об этом?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

У нас была похожая проблема, и мы использовали следующий код:

for col in df.columns:
    if df[col].isnull().all().compute()=True:
        df = df.drop(col,axis=1) 
0 голосов
/ 17 октября 2018

Вы правы, нет способа сделать это с помощью df.dropna().

Я бы предложил использовать это уравнение df.loc[:,df.isnull().sum()<THRESHOLD]

...