在 Pandas 中应用 One Hot Encoding 时如何避免获得 NaN
How to Avoid getting NaN when applying One Hot Encoding in Pandas
我正在训练机器学习模型来预测我所在国家/地区的房价。我不确定如何对我的数据应用一种热编码:所以我从这里复制了代码:One Hot Encoded Labels back to DataFrame.
它看起来运行良好,除了我的其他标签现在被 NaN 取代。
Before applying the One Hot Encoding, and after I apply one hot encoding, this is the output
我用过的代码如下:
print(ds.head())
categorical_feature_mask = ds.dtypes==object
categorical_cols = ds.columns[categorical_feature_mask].tolist()
labeled_ds = ds[categorical_cols]
enc = OneHotEncoder()
enc.fit(labeled_ds)
onehotlabels = enc.transform(labeled_ds).toarray()
new_columns=list()
for col, values in zip(labeled_ds.columns, enc.categories_):
new_columns.extend([col + '_' + str(value) for value in values])
ds= pd.concat([ds, pd.DataFrame(onehotlabels, columns=new_columns)], axis='columns')
names = ['location', 'property_type']
ds.drop(names, axis=1, inplace=True)
ds.head()
关于可能导致此问题的原因有什么想法吗?
您遇到此问题是因为索引不同。
你的 ds
可能有不同的索引(不是从 0 开始连续的)但是你的一个热标签数据帧是从 0 开始连续的。
所以当你要进行连接时。由于索引不相同,因此您在那里得到了 nan。
请同时检查形状以确认问题是否是由于索引不匹配造成的。
求解:
pd.concat([ds.reset_index(drop=True), pd.DataFrame(onehotlabels, columns=new_columns)], axis='columns')
或
(如果你想保持与 ds
相同的索引)
pd.concat([ds, pd.DataFrame(onehotlabels, columns=new_columns), index=ds.index], axis='columns')
我正在训练机器学习模型来预测我所在国家/地区的房价。我不确定如何对我的数据应用一种热编码:所以我从这里复制了代码:One Hot Encoded Labels back to DataFrame.
它看起来运行良好,除了我的其他标签现在被 NaN 取代。 Before applying the One Hot Encoding, and after I apply one hot encoding, this is the output
我用过的代码如下:
print(ds.head())
categorical_feature_mask = ds.dtypes==object
categorical_cols = ds.columns[categorical_feature_mask].tolist()
labeled_ds = ds[categorical_cols]
enc = OneHotEncoder()
enc.fit(labeled_ds)
onehotlabels = enc.transform(labeled_ds).toarray()
new_columns=list()
for col, values in zip(labeled_ds.columns, enc.categories_):
new_columns.extend([col + '_' + str(value) for value in values])
ds= pd.concat([ds, pd.DataFrame(onehotlabels, columns=new_columns)], axis='columns')
names = ['location', 'property_type']
ds.drop(names, axis=1, inplace=True)
ds.head()
关于可能导致此问题的原因有什么想法吗?
您遇到此问题是因为索引不同。
你的 ds
可能有不同的索引(不是从 0 开始连续的)但是你的一个热标签数据帧是从 0 开始连续的。
所以当你要进行连接时。由于索引不相同,因此您在那里得到了 nan。
请同时检查形状以确认问题是否是由于索引不匹配造成的。
求解:
pd.concat([ds.reset_index(drop=True), pd.DataFrame(onehotlabels, columns=new_columns)], axis='columns')
或
(如果你想保持与 ds
相同的索引)
pd.concat([ds, pd.DataFrame(onehotlabels, columns=new_columns), index=ds.index], axis='columns')