Pandas 无法在python中将字符串转换为浮点,以及如何使用此数据集训练模型

Pandas 无法在python中将字符串转换为浮点,以及如何使用此数据集训练模型,pandas,machine-learning,scikit-learn,Pandas,Machine Learning,Scikit Learn,我有一个列数据集:年龄(浮动类型)、性别(str类型)、地区(str类型)和费用(浮动类型) 我想使用年龄、性别和地区作为特征预测费用,我如何在scikit learn中做到这一点 我尝试了一些东西,但它显示了“ValueError:无法将字符串转换为float:'northwest'” 列区域包含字符串,在SVM分类器中不能这样使用,因为它不是向量 因此,您必须将此列转换为SVM可用的内容。以下是将区域更改为分类序列的示例: import pandas as pd from sklearn i

我有一个列数据集:年龄(浮动类型)、性别(str类型)、地区(str类型)和费用(浮动类型)

我想使用年龄、性别和地区作为特征预测费用,我如何在scikit learn中做到这一点

我尝试了一些东西,但它显示了
“ValueError:无法将字符串转换为float:'northwest'”


区域
包含字符串,在SVM分类器中不能这样使用,因为它不是向量

因此,您必须将此列转换为SVM可用的内容。以下是将
区域
更改为分类序列的示例:

import pandas as pd
from sklearn import svm
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'age':[20,30,40,50],
              'sex':['male','female','female','male'],
              'region':['northwest','southwest','northeast','southeast'],
              'charges':[1000,1000,2000,2000]})
df.sex = (df.sex == 'female')
df.region = pd.Categorical(df.region)
df.region = df.region.cat.codes
X = df.loc[:,['age','sex','region']]
y = df.loc[:,['charges']]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)
解决此问题的另一种方法是使用一种热矢量编码:

import pandas as pd
from sklearn import svm
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'age':[20,30,40,50],
              'sex':['male','female','female','male'],
              'region':['northwest','southwest','northeast','southeast'],
              'charges':[1000,1000,2000,2000]})
df.sex = (df.sex == 'female')
df = pd.concat([df,pd.get_dummies(df.region)],axis = 1).drop('region',1)
X = df.drop('charges',1)
y = df.charges
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df.region = le.fit_transform(df.region)
另一种方法是执行标签编码:

import pandas as pd
from sklearn import svm
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'age':[20,30,40,50],
              'sex':['male','female','female','male'],
              'region':['northwest','southwest','northeast','southeast'],
              'charges':[1000,1000,2000,2000]})
df.sex = (df.sex == 'female')
df = pd.concat([df,pd.get_dummies(df.region)],axis = 1).drop('region',1)
X = df.drop('charges',1)
y = df.charges
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df.region = le.fit_transform(df.region)
当然,这个方法列表并不是详尽无遗的,根据您的问题,它们的性能会有所不同


非数字数据的使用非常重要,需要对现有技术有一点了解(我鼓励你去kaggle的论坛搜索,在那里你可以找到有价值的信息)。

区域
包含字符串,这些字符串不能在SVM分类器中使用,因为它不是向量

因此,您必须将此列转换为SVM可用的内容。以下是将
区域
更改为分类序列的示例:

import pandas as pd
from sklearn import svm
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'age':[20,30,40,50],
              'sex':['male','female','female','male'],
              'region':['northwest','southwest','northeast','southeast'],
              'charges':[1000,1000,2000,2000]})
df.sex = (df.sex == 'female')
df.region = pd.Categorical(df.region)
df.region = df.region.cat.codes
X = df.loc[:,['age','sex','region']]
y = df.loc[:,['charges']]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)
解决此问题的另一种方法是使用一种热矢量编码:

import pandas as pd
from sklearn import svm
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'age':[20,30,40,50],
              'sex':['male','female','female','male'],
              'region':['northwest','southwest','northeast','southeast'],
              'charges':[1000,1000,2000,2000]})
df.sex = (df.sex == 'female')
df = pd.concat([df,pd.get_dummies(df.region)],axis = 1).drop('region',1)
X = df.drop('charges',1)
y = df.charges
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df.region = le.fit_transform(df.region)
另一种方法是执行标签编码:

import pandas as pd
from sklearn import svm
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'age':[20,30,40,50],
              'sex':['male','female','female','male'],
              'region':['northwest','southwest','northeast','southeast'],
              'charges':[1000,1000,2000,2000]})
df.sex = (df.sex == 'female')
df = pd.concat([df,pd.get_dummies(df.region)],axis = 1).drop('region',1)
X = df.drop('charges',1)
y = df.charges
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df.region = le.fit_transform(df.region)
当然,这个方法列表并不是详尽无遗的,根据您的问题,它们的性能会有所不同


非数字数据的使用非常重要,需要对现有技术有一点了解(我鼓励你去kaggle的论坛搜索,在那里你可以找到有价值的信息)。

区域
是一个分类变量。要在预测中使用它,你可能需要转换它,比如说使用一个热编码,等等。在这里阅读更多:好的,那么性别呢。。。??如果我将东北、西北、东南、西南地区分别编码为0、1、2、3……那么如果我将性别编码;男性,女性为0,1,则会有相同的值…它会影响过程吗???
区域
是一个分类变量。要在预测中使用它,你可能需要转换它,比如说使用一个热编码,等等。在这里阅读更多:好的,那么性别呢。。。??如果我将东北、西北、东南、西南地区分别编码为0、1、2、3……那么如果我将性别编码;男性,女性为0,1,那么会有相同的值…它会影响流程吗?我已经使用了
LabelEncoder()
,我的问题已经解决了。这是解决这个问题的正确方法吗?这是其他方法中的一种
pd.Category
对目标不做任何假设,只需将不同的值拆分并将其散列为整数,
Labelencoder
使用目标的知识,如果训练数据得到有效分发,则可以进行更精确的映射。一个热编码创建的二进制维度或多或少被分类器使用。这当然不是一个全面的列表,请查看更多信息。我使用了
LabelEncoder()
,我的问题得到了解决。这是解决这个问题的正确方法吗?这是其他方法中的一种
pd.Category
对目标不做任何假设,只需将不同的值拆分并将其散列为整数,
Labelencoder
使用目标的知识,如果训练数据得到有效分发,则可以进行更精确的映射。一个热编码创建的二进制维度或多或少被分类器使用。这当然不是一个全面的列表,请看一下以了解更多信息。