【问题标题】:How to fix ValueError with Pandas iterrows如何使用 Pandas iterrows 修复 ValueError
【发布时间】: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


【解决方案1】:

解决方案是不要在这里使用iterows(),而只是一个简单的for循环。

for idx, val in enumerate(legend_labels):
    L.get_texts()[idx].set_text(val)

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 2017-06-22
    • 2019-08-25
    • 2021-09-24
    • 2021-01-29
    • 2020-04-01
    • 2020-08-25
    • 2019-12-21
    • 2013-11-09
    相关资源
    最近更新 更多