Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
808 views
in Technique[技术] by (71.8m points)

python - Dendrogram: ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

I am trying to plot Dendrogram to cluster data but this error is stopping me. my date is here "https://assets.datacamp.com/production/repositories/655/datasets/2a1f3ab7bcc76eef1b8e1eb29afbd54c4ebf86f2/eurovision-2016.csv"

I first chose columns to work with

target_col = df_euro["To country"]
feat = df_euro[["Jury A","Jury B","Jury C","Jury D","Jury E"]]

#Convert them into ndarrays
x = feat.to_numpy(dtype ='float32')
y = target_col.to_numpy()

# Calculate the linkage: mergings
mergings = linkage(x, 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 has same shape (1066,5) and (1066,) There is No NA in both features and target_col

I know the issue is with labels but i couldn't find away to solve it. find Any help will be really appreciated :)

Edit: Here is entire traceback

---------------------------------------------------------------------------
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:ProgramDataAnaconda3libsite-packagesscipyclusterhierarchy.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:ProgramDataAnaconda3libsite-packagespandascoregeneric.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().

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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()

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...