首页 > 解决方案 > ValueError:无法将字符串转换为浮点数:“观察”

问题描述

我正在尝试进行编码以运行我的模型。这是我运行的代码和错误:

我要转换两列。(日期和国家 ID)

df["ID"] = pd.get_dummies(df.CountryID, prefix='CountryID')
df["Date"] = pd.get_dummies(df.Date, prefix='Date')
y=df.IndustrialP
X=df.drop('IndustrialP', axis=1)
split = int(len(df)*0.8)
X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[split:]
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=10, batch_size=10)

我收到以下错误(DE 是德国的代码,这是 CountryID 列下的观察值)

ValueError: could not convert string to float: 'DE'

我该如何解决?谢谢。

标签: pythonpandasencoding

解决方案


我认为您需要CountyID从用于拟合模型的数据框中删除。你可能也想放弃Date,因为你正在为此生成假人。(Date如果包含它可能不会导致错误,因为日期可能会默默地转换为数字;但是由于您使用假人作为日期,我认为您不希望日期本身成为模型中的变量。)

我有点困惑为什么你没有从这些陈述中得到错误:

df["ID"] = pd.get_dummies(df.CountryID, prefix='CountryID')
df["Date"] = pd.get_dummies(df.Date, prefix='Date')

get_dummies()产生一个数据帧。将其分配到另一个 DataFrame 的单个列中是行不通的。当我尝试使用简单的虚拟数据执行此操作时出现错误。

我最好的猜测是,您正在处理的测试数据实际上在每一列中只有一个值。这将导致get_dummies()返回单列 DataFrame,在这种情况下分配应该有效。

如果是这种情况,当您使用具有更多唯一值的数据时,此逻辑将不起作用。我认为您想将虚拟数据帧连接到原始数据帧(或连接到X)。


推荐阅读