【发布时间】:2021-09-27 23:54:52
【问题描述】:
我正在使用 pandas 读取 excelsheet,excelsheet 的列超过 10,其中我只对 3 个感兴趣,所以我读取它,删除具有 Null 值的行,然后创建测试和验证集。在将其拟合到逻辑回归模型时,出现错误
这是代码
train, tv = train_test_split(df1, test_size=0.2, random_state=0)
test, val = train_test_split(tv, test_size=0.5, random_state=0)
# Logistic Regression
lr = LogisticRegression()
logit_model = lr.fit(train, test)
堆栈跟踪:
Traceback (most recent call last):
File "ml.py", line 22, in <module>
logit_model = lr.fit(train, test)
File "F:\proj\venv\lib\site-packages\sklearn\linear_model\_logistic.py", line 1344, in fit
X, y = self._validate_data(X, y, accept_sparse='csr', dtype=_dtype,
File "F:\proj\venv\lib\site-packages\sklearn\base.py", line 433, in _validate_data
X, y = check_X_y(X, y, **check_params)
File "F:\proj\venv\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
return f(*args, **kwargs)
File "F:\proj\venv\lib\site-packages\sklearn\utils\validation.py", line 871, in check_X_y
X = check_array(X, accept_sparse=accept_sparse,
File "F:\proj\venv\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
return f(*args, **kwargs)
File "F:\proj\venv\lib\site-packages\sklearn\utils\validation.py", line 673, in check_array
array = np.asarray(array, order=order, dtype=dtype)
File "F:\proj\venv\lib\site-packages\pandas\core\generic.py", line 1990, in __array__
return np.asarray(self._values, dtype=dtype)
ValueError: could not convert string to float: 'Yes, policy'
数据框看起来像这样:
ID ANSWER TEXT
0 24100.0 Yes, policy Source text snippet:The ACS Group combines its...
1 24100.0 Yes, policy Source text snippet:The ACS Environmental Poli...
2 24100.0 Yes, policy Source text snippet:The ACS Environmental Poli...
3 24100.0 Yes, policy Source text snippet:6. CONTENTS OF THE ENVIRON...
4 24100.0 Yes, policy Source text snippet:6. CONTENTS OF THE ENVIRON...
通过查看 valueerror,我认为这可能是因为 Answer 列中 Yes 之后的逗号,但即使在删除它之后也会出现相同的错误。 excel 中的 ID 看起来像 24100,但是当我在数据框中检查它的类型时,它显示为 float64 并显示为 24100.0。我不明白这一点,例如为什么在将其安装到模型上时会引发错误。
【问题讨论】:
-
问题不在于文本字符串的内容,而在于它根本就是文本。您需要将文本转换为某种数值。您可以考虑将其转换为分类变量:pandas docs。不过,TEXT 列也会出现同样的问题,具体取决于包含分类变量的唯一值的数量,逻辑回归可能无法很好地执行。
-
@BrendanA。非常感谢您的帮助..会记住这一点。
-
Yes, Policy是否出现在Answer列中? -
@AdarshWase 它在那里,你可以在数据框中看到它
标签: python pandas machine-learning scikit-learn