Python 如何在一个热编码中修复此ValueError?

Python 如何在一个热编码中修复此ValueError?,python,data-science,data-mining,Python,Data Science,Data Mining,尝试在Jupyter笔记本中运行以下代码时,会导致以下错误: dataset_train.drop_duplicates(inplace=True) dataset_test.drop_duplicates(inplace=True) #One-Hot-Encoding¶ enc = OneHotEncoder() dataset_train_categorical_values_encenc = enc.fit_transform(dataset_train_categorical_valu

尝试在Jupyter笔记本中运行以下代码时,会导致以下错误:

dataset_train.drop_duplicates(inplace=True)
dataset_test.drop_duplicates(inplace=True)

#One-Hot-Encoding¶
enc = OneHotEncoder()
dataset_train_categorical_values_encenc = enc.fit_transform(dataset_train_categorical_values_enc)
dataset_train_cat_data = pd.DataFrame(dataset_train_categorical_values_encenc.toarray(),columns=dumcols)
# test set
dataset_test_categorical_values_encenc = enc.fit_transform(dataset_test_categorical_values_enc)
dataset_test_cat_data = pd.DataFrame(dataset_test_categorical_values_encenc.toarray(),columns=testdumcols)
错误:ValueError:传递值的形状为(82332151),索引暗示(82332155)

到目前为止,这是上面表格前的全部代码:

#Label Encoder

ategorical_columns=['proto', 'service', 'state']
# insert code to get a list of categorical columns into a variable, categorical_columns
categorical_columns=['proto', 'service', 'state'] 
 # Get the categorical values into a 2D numpy array
dataset_train_categorical_values = dataset_train[categorical_columns]
dataset_test_categorical_values = dataset_test[categorical_columns]

    
    #Transform categorical features into numbers using LabelEncoder()
dataset_train = pd.read_csv('BMW_Theftprotection_trainer.csv')
dataset_test = pd.read_csv('BMW_Theftprotection_tester.csv') 
dataset\u train\u category\u values\u enc=dataset\u train\u category\u values.apply(LabelEncoder().fit\u transform) 打印(数据集\u序列\u分类\u值\u enc.head()) #测试集 dataset\u test\u category\u values\u enc=dataset\u test\u category\u values.apply(LabelEncoder().fit\u transform)


有人知道如何修复它吗?

这可能是因为一个数据帧中的数据值不会出现在另一个数据帧中,这将在一个数据帧热编码时改变您的维度

在一个热编码之前将它们合并,然后将它们重新拆分。这将为您提供相等的列尺寸

将熊猫作为pd导入
数据帧\列车=pd.dataframe(
{“一”:[“a”、“e”、“i”、“a”、“a”、“b”],“二”:[“x”、“x”、“y”、“x”、“y”、“y”],
)
dataframe_测试=pd.dataframe(
{“一”:[“a”、“e”、“r”],“二”:[“x”、“x”、“y”],},
)
列车试验df=pd.concat(
[数据帧测试,数据帧列车],
键=[“测试”,“训练”]
).液滴液位(液位=1,轴=0)
ohe=pd.获取假人(列车试验)
test_ohe=ohe.loc[‘test’,:]值
列车位置=列车位置[‘列车’,:]值

我在这里使用了一个热编码,因为它使以后的分割更加容易。

是的,事实上,火车数据集比测试数据集有更多的类别。我怎样才能把基于一个类别的两个数据集之间的差异放到另一个类别上呢?我真的不理解你的问题。上面的代码将通过使它们具有相同的列来修复您的错误。如果它有效,并且您有后续问题,最好将其标记为正确,然后再问另一个问题。如果是关于ValueError,请澄清,因为我不确定您的意思。我将您的代码放入jupyter笔记本中,它收到了一条错误消息,并发出了关于inputformat(training dataset)的消息,该格式不适合dataframe格式。我之所以这样做,实际上是为了将缺少的测试数据集类别从训练数据集转移到测试数据集。我认为一个热编码可以解决这个问题,你需要更清楚地描述错误。“training dataset”一词没有出现在本页上,我无法说出哪一行出现了错误,这使我很难提供帮助。试着用一个新的方法重现你的问题。这样我们就可以围绕相同的代码进行讨论,避免出现混乱的时刻。您当前的问题是关于一次热重唱中的ValueError。如果新问题与原始问题相去甚远,最好在回答时关闭此问题并询问另一个问题。这样的话,这将作为你的第一个问题留给其他人的答案。
#Dummy Columns


# protocol type
unique_protocol=sorted(dataset_train.proto.unique())
string1 = 'proto_'
unique_protocol2=[string1 + x for x in unique_protocol]
# service
unique_service=sorted(dataset_train.service.unique())
string2 = 'service_'
unique_service2=[string2 + x for x in unique_service]
# flag
unique_flag=sorted(dataset_train.state.unique())
string3 = 'state_'
unique_flag2=[string3 + x for x in unique_flag]
# put together
dumcols=unique_protocol2 + unique_service2 + unique_flag2
print(dumcols)

#do same for test set
unique_service_test=sorted(dataset_test.service.unique())
unique_service2_test=[string2 + x for x in unique_service_test]
testdumcols=unique_protocol2 + unique_service2_test + unique_flag2