识别具有无穷大值的特征列并在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)
这里有几个问题:
- 你是如何解决这个问题的?意思是您如何识别导致此问题的数据。我的数据集有将近 2300 多个特征列。
- 你是怎么解决的?
感谢您的宝贵时间!
将 fillna
与 df.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'))
关于这个话题有很多问题和答案,但我无法解决我的问题。
我正在尝试使用 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)
这里有几个问题:
- 你是如何解决这个问题的?意思是您如何识别导致此问题的数据。我的数据集有将近 2300 多个特征列。
- 你是怎么解决的?
感谢您的宝贵时间!
将 fillna
与 df.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'))