Определение столбцов функций с бесконечными значениями и обработка их в pandas, Python 3,6 - PullRequest
1 голос
/ 09 июля 2020

По этому топу есть множество вопросов и ответов c, но я не могу решить свою проблему.

Я пытаюсь использовать модель ADASYN из imblearn, чтобы сбалансировать свой набор данных.

Вот мой код:

    df = pd.read_csv("data/"+filename, nrows=1000)
    df.replace([np.inf, -np.inf], np.nan, inplace=True)
    df_imputed = df.fillna(df.mean())
    X = df_imputed.drop(['target'], axis=1)
    y = df_imputed.target
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
    from imblearn.over_sampling import ADASYN
    ada = ADASYN()
    X_resampled, y_resampled = ada.fit_sample(X, y)

Но я получаю сообщение об ошибке:

    ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

в строке

    X_resampled, y_resampled = ada.fit_sample(X, y)

Пара вопросов здесь:

  1. Как решить эту проблему? Это означает, как вы определяете данные, вызывающие эту проблему. В моем наборе данных почти 2300+ столбцов с характеристиками.
  2. Как вы его решаете?

Спасибо за ваше время!

1 Ответ

0 голосов
/ 09 июля 2020

Одна из проблем, связанных с использованием fillna с df.mean(), заключается в том, что если столбец содержит только nan (или inf до того, как вы replace на nan), тогда столбец все еще заполнен nan после fillna. Один из способов - удалить столбцы, в которых есть только nan, потому что в любом случае эти столбцы не будут полезны для модели машинного обучения. Для этого вы можете использовать dropna и связать все методы.

df_imputed = (df.replace([np.inf, -np.inf], np.nan)
                .fillna(df.mean())
                .dropna(axis=1, how='all'))
...