I am trying to plot a Dendrogram to cluster data but this error is stopping me. My datea is here.
I first chose columns to work with:
df_euro = pd.read_csv('https://assets.datacamp.com/production/repositories/655/datasets/2a1f3ab7bcc76eef1b8e1eb29afbd54c4ebf86f2/eurovision-2016.csv')
samples = df_euro.iloc[:, 2:7].values[:42]
country_names = df_euro.iloc[:, 1].values[:42]
# Calculate the linkage: mergings
mergings = linkage(samples , method = 'complete')
# Plot the dendrogram
dendrogram(
mergings,
labels = y,
leaf_rotation = 90,
leaf_font_size = 6
)
plt.show()
But I'm getting this error which I can't understand. I googled it and checked that both have the same shape (1066,5) and (1066,). There is no NA in both features and country_names.
I know the issue is with labels because it works well when I remove it but I couldn't find away to solve it. Any help will be really appreciated. Alternately, how can I add the labels to the Dendrogram?
The error I am getting:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-113-7fffdc847e5e> in <module>
4 mergings = linkage(feat, method = 'complete')
5 # Plot the dendrogram
----> 6 dendrogram(
7 mergings,
8 labels = target_col,
C:\ProgramData\Anaconda3\lib\site-packages\scipy\cluster\hierarchy.py in dendrogram(Z, p, truncate_mode, color_threshold, get_leaves, orientation, labels, count_sort, distance_sort, show_leaf_counts, no_plot, no_labels, leaf_font_size, leaf_rotation, leaf_label_func, show_contracted, link_color_func, ax, above_threshold_color)
3275 "'bottom', or 'right'")
3276
-> 3277 if labels and Z.shape[0] + 1 != len(labels):
3278 raise ValueError("Dimensions of Z and labels must be consistent.")
3279
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
1476
1477 def __nonzero__(self):
-> 1478 raise ValueError(
1479 f"The truth value of a {type(self).__name__} is ambiguous. "
1480 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().