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)