【发布时间】:2021-01-20 12:17:22
【问题描述】:
我正在尝试编写一个函数,该函数在给定 PD 列和图例标签列表的情况下生成条形图。我有经过数字编码的分类数据,所以默认标签只是我想改回字符串值的数字。这是我的代码:
legend_labels = ["label 1", "label 2"]
def plot_percentages(col, legend_labels):
plt.figure(figsize=(7,6))
ax = sns.barplot(x="x", y="x", hue=col, data=df,
estimator=lambda x: len(x) / len(df) * 100)
ax.set(ylabel="Percentage")
plt.xticks([0, 1], ['A', "B"])
L=plt.legend()
for idx, val in pd.DataFrame(legend_labels).iterrows():
L.get_texts()[idx].set_text(val)
ax
它返回以下错误:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
提前感谢您提供有关如何解决此问题的任何建议。
【问题讨论】:
-
为什么要将列表转换为 df 只是为了遍历它?直接从列表中获取标签即可。
-
因为我得到“AttributeError: 'list' object has no attribute 'iterrows.'” Remoing 该属性给我错误“ValueError: too many values to unpack (expected 2).”我需要同时提取列表项及其在列表中的位置,但如果不先将其转换为 df,我不知道该怎么做。
-
但是为什么要使用 iterrows() 呢?
for val in legend_labels:工作得很好。或者如果你需要 idx 那么for idx, val in enumerate(legend_labels): -
是的, enumerate() 就是我要找的。谢谢!
-
我已添加为答案。如果仍有问题,请发表评论
标签: pandas dataframe valueerror