keep gettin "AssertionError: arrays and names must have the same length" while trying to use panda cross tab

keep gettin "AssertionError: arrays and names must have the same length" while trying to use panda cross tab

这是我的代码

clf = RandomForestClassifier(n_jobs=2 , random_state=0)
clf.fit(df_train[features_train] , df_train['steps_title'])
y = clf.predict(df_test[features_test])
x = df_test['steps_title']
print(y)
print(x)
pd.crosstab(x, y , rownames='actual step', colnames='predict step')

steps_title是表示应聘者工作处理级别的标题。
x 和 y 的输出是:

y = [3 3 3 3 2 3 3 3 3 3 3 3 3 3 2 2 3 3 3 3 3 3 3 2 3 2 2 3 3 3 2 3 3 3 2 3 2
 3 3 2 2 3 3 3 3 3 3 3 2 3 2 3 2 2 3 2 3 3 2 2 3 3 2 3 3 2 3 3 3 3 3 2 3 3
 3 3 3 3 3 3 2 2 3 3 2 3 2 2 2 3 2 3 3 3 3 2 3 3 3 3 2 3 3 2 2 3 3 3]

x:

0      3
1      3
2      3
3      3
4      2
      ..
103    2
104    2
105    3
106    2
107    3

它们的长度相同,都是 180。

我也尝试使用 tolist() 函数
将 x 和 y 转换为列表 提前致谢

尝试使用括号:

>>> pd.crosstab(x, y , rownames=['actual step'], colnames=['predict step'])
predict step   2   3
actual step         
2             32   0
3              0  76
>>> 

因为是复数rownamescolnames,需要加括号。

问题是 rownamescolnames 的用法:

来自documentation

rownames : sequence, default None

If passed, must match number of row arrays passed.

colnames : sequence, default None

If passed, must match number of column arrays passed.

它不能是标量。请参阅文档中的示例以获得正确的用法。

pd.crosstab(x, y , rownames=['actual step'], colnames=['predict step'])