识别具有无穷大值的特征列并在pandas、Python中处理 3.6

Identifying feature columns with infinity values and handle it in pandas, Python 3.6

关于这个话题有很多问题和答案,但我无法解决我的问题。

我正在尝试使用 imblearn 的 ADASYN 模型来平衡我的数据集。

到目前为止,这是我的代码:

    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. 你是怎么解决的?

感谢您的宝贵时间!

fillnadf.mean() 一起使用的问题之一是,如果该列仅包含 nan(或之前的 inf,而您 replace nan),那么在fillna之后的列仍然是nan。一种方法是删除只有 nan 的列,因为无论如何这些列对 ML 模型都没有用。为此,您可以使用 dropna 并链接所有方法。

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