python - 识别具有无穷大值的特征列并在 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
),那么该列仍然nan
在fillna
. 一种方法是删除只有 的列nan
,因为无论如何这些列对 ML 模型没有用处。为此,您可以使用dropna
并链接所有方法。
df_imputed = (df.replace([np.inf, -np.inf], np.nan)
.fillna(df.mean())
.dropna(axis=1, how='all'))
推荐阅读
- ansible - Ansible lint 报告“软件包安装不应使用最新的”
- python - 使用 python-docx 插入图像后 Word 文档的表格单元格中的空行
- string - 在结构字段中查找字符串的索引
- python-3.x - 使用 cerberus 正则表达式验证字符串以模式结尾
- ruby-on-rails - 如何干燥 Rails 6 部分形式
- r - Plotly (R) 使小数成为条形图中最大的条形
- mysql - 有没有办法可视化 MySQL 外键级联?
- sql - SQL 通配符不产生任何结果
- java - 使用 JPA 和 Hibernate 覆盖 CrudeRepository save() 错误
- swift - 缺少作为视图祖先的视图