2
$\begingroup$

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().
$\endgroup$

1 Answer 1

0
$\begingroup$

Just in case someone else is searching for the same issue, by converting the labels to list, it will work.

samples= df_euro.iloc[:, 2:7].values[:42]
country_names= list(df_euro.iloc[:, 1].values[:42])

mergings = linkage(samples, method='single')

# Plot the dendrogram
fig, ax = plt.subplots(figsize=(15, 10))
fig  = dendrogram(mergings, labels=country_names)
plt.show()
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.