Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;ValueError:无法将字符串转换为浮点值;scikit学习中的错误_Python_Numpy_Scikit Learn - Fatal编程技术网

Python &引用;ValueError:无法将字符串转换为浮点值;scikit学习中的错误

Python &引用;ValueError:无法将字符串转换为浮点值;scikit学习中的错误,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,我正在运行以下脚本: import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.preprocessing import OneHotEncoder dataset = pd.read_csv('data/50_Startups.csv') X = dataset.iloc[:, :-1].values y = dataset.iloc[:, 4].values onehotencode

我正在运行以下脚本:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
dataset = pd.read_csv('data/50_Startups.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
onehotencoder = OneHotEncoder(categorical_features=3, 
handle_unknown='ignore')
onehotencoder.fit(X)
数据头看起来像:

我有这个:

ValueError:无法将字符串转换为浮点:“纽约”

我阅读了问题的答案,然后打开了scikit learn,但是如何看到scikit learn作者没有字符串中的空格问题

我知道我可以使用
sklearn.preprocessing
中的
LabelEncocder
,然后使用OHE,效果很好,但在这种情况下

In case you used a LabelEncoder before this OneHotEncoder to convert the categories to integers, then you can now use the OneHotEncoder directly.
warnings.warn(msg, FutureWarning)
按摩发生

您可以使用或


测试此代码的前5行。

伤害您的是
categorical\u features=3
。不能对字符串数据使用分类功能。删除此选项,幸运将与您同在。此外,您可能需要
fit\u transform
,而不是
fit

onehotencoder = OneHotEncoder(handle_unknown='ignore')
transformed = onehotencoder.fit_transform(X[:, [3]]).toarray()
X1 = np.concatenate([X[:, :2], transformed, X[:, 4:]], axis=1)
#array([[165349.2, 136897.8, 0.0, '0.0, 1.0, 192261.83],
#       [162597.7, 151377.59, 1.0, 0.0, 0.0, 191792.06],
#       [153441.51, 101145.55, 0.0, 1.0, 0.0, 191050.39],
#       [144372.41, 118671.85, 0.0, 0.0, 1.0, 182901.99],
#       [142107.34, 91391.77, 0.0, 1.0, 0.0, 166187.94']])
试试这个:

from sklearn.compose import ColumnTransformer, make_column_transformer
from sklearn.preprocessing import OneHotEncoder

columntransformer = make_column_transformer(
(OneHotEncoder(categories='auto'), [3]),
    remainder='passthrough')


X = columntransformer.fit_transform(X)
X = X.astype(float)

从代码中可以看到,我的输入是csv filetry:dataset.info(),用于检查数据框中的数据类型。我在第一行添加了5行,并链接到pastebin,其中包含文件的全部内容“State”列中有50个非空对象。现在我看到了这个问题,但无论如何,我不知道如何在不使用
LabelEncoder
的情况下修复它,您希望“newyork”作为浮点数是什么?为什么你认为它与字符串中的空格有关?在这种情况下,整个数据集转换为分类数据,而不仅仅是3d列,你可以选择要转换的列。我运行了以下代码:
onehotcoder=onehotcoder(handle_unknown='ignore')onehotcoder.fit(X[:,3])
并出现此错误:
ValueError:预期为2D数组,但实际为1D数组:
因为传递的是1D数组而不是2D数组。你应该通过
X[:,[3]]
X[:,3]。重塑(1,-1)
。好的,我照你说的做了。现在,如果我应用这个
X=onehotcoder.transform(X[:,[3]]).toarray()
I将丢失我的前3列。如果我应用这个
X=onehotcoder.transform(X[:,3]).toarray()
同样的错误也会发生
from sklearn.compose import ColumnTransformer, make_column_transformer
from sklearn.preprocessing import OneHotEncoder

columntransformer = make_column_transformer(
(OneHotEncoder(categories='auto'), [3]),
    remainder='passthrough')


X = columntransformer.fit_transform(X)
X = X.astype(float)