将标签从字符串转换为浮点数

Posted

技术标签:

【中文标题】将标签从字符串转换为浮点数【英文标题】:Transform a label from string to float 【发布时间】:2021-03-03 16:42:27 【问题描述】:

我想将标签(即字符串)转换为浮点数。 我是这样做的:

label = LabelEncoder()
balanced_data['label'] = label.fit_transform(balanced_data['activity'])
balanced_data.head()

我获得了数字形式的标签,但仍然是字符串。 我该如何解决?谢谢

【问题讨论】:

标签编码产生一个字符串。在 pandas 中检查 dtypes 是使用 Series.dtype 方法完成的,而不是 type 我并不是真正的 Pandas 专家,但是...label.fit_transform(float(balanced_data['activity'])) 呢? 【参考方案1】:

你可以试试“eval”

st = "5"
st_as_int = eval(st) 
print(type(st_as_int))

将返回“int”

【讨论】:

eval 只适用于一个对象,我想更改 Dataframe 的所有列 是的,所以:balanced_data['label'] = balance_data['label'].apply(lambda x: eval(x))【参考方案2】:

由于标签当前是字符串,您必须将字符串转换为 float

label = float(label)

应该可以。 More on casting here.

【讨论】:

【参考方案3】:

让我们假设一个新的 DataFrame 有两列(产品和价格列)。只是这一次,Price 列下的值将包含数字和非数字数据的组合: 然后您可以使用 astype(float) 方法执行转换为浮点数:

Data = 'Product': ['A','B'],'Price': ['250','270']
df = pd.DataFrame(Data)
df['Price'] = df['Price'].astype(float)

print (df)
print (df.dtypes)

【讨论】:

【参考方案4】:

您的问题出在其他地方。你定义label = LabelEncoder() - 然后你使用label.type 并得到AttributeError: 'str' object has no attribute 'type'

这意味着label(此时此刻)是字符串类型,而应该报告为<class 'sklearn.preprocessing._label.LabelEncoder'> 跟在label = LabelEncoder() 之后!


当以这种方式拟合标签时,您已经得到整数,而不是字符串:不需要任何转换:

from sklearn import preprocessing
import pandas as pd
from random import random, choice

r = random
c = choice

df = pd.DataFrame([[r(),r(),r(),r(),c(["sitting","standing"])] for _ in range(6)],
                  columns=["quat1","quat2","quat3","quat4","activity"])

le = preprocessing.LabelEncoder()
df["label"] = le.fit_transform(df["activity"])

print(df)
print(df["label"].dtypes)

输出:

      quat1     quat2     quat3     quat4  activity  label
0  0.550365  0.051738  0.485262  0.194497  standing      1
1  0.656460  0.151324  0.131370  0.338022  standing      1
2  0.512595  0.501235  0.449589  0.302794  standing      1
3  0.440568  0.043643  0.817394  0.128534   sitting      0
4  0.364890  0.714289  0.683436  0.731021   sitting      0
5  0.708488  0.423278  0.624220  0.880735  standing      1

int32

要返回您的标签,请使用

print(le.inverse_transform([0]))   # ['sitting']

见Examples on sklearn.preprocessing.LabelEncoder documentation

【讨论】:

以上是关于将标签从字符串转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章

opencv c++:将图像矩阵从无符号字符转换为浮点数

朴素贝叶斯高斯抛出 ValueError:无法将字符串转换为浮点数:'M'

无法在python中将字符串转换为浮点数

sklearn-LinearRegression:无法将字符串转换为浮点数:'--'

ValueError:无法将字符串转换为浮点数:'GIAC'

我收到 ValueError:无法将字符串转换为浮点数:'8,900' [重复]