【问题标题】:Truth Value of a Series is Ambiguous - Python-Docx系列的真值不明确 - Python-Docx
【发布时间】:2020-04-01 00:01:15
【问题描述】:

尝试从 pandas 数据框中获取一个值并使用 python-docx 将其插入到文档中:

import docx
from docx.shared import Inches
import numpy as np
import pandas as pd

df = pd.DataFrame({'A':(1,2,3,4,5),'B':('a','b','c','d','e')})

document = docx.Document()

p = document.add_paragraph(df.loc[df.B=='c', 'A'].astype('str'))

但我收到此错误:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我发现了很多关于堆栈溢出问题的参考资料,但不清楚我的情况与我的情况有何关系,因为我的代码在这个可重新运行的示例和实际数据中都只返回一个结果。我尝试了df.loc[df.B=='c', 'A'] 的几种变体,但没有不同的结果。

编辑:下面引用的可能重复与逻辑参数有关。就我而言,问题是我试图使用一个系列来代替一个值。 DYZ 在下面概述了解决方案。

我的 python-docx 似乎不喜欢浮点数据类型,所以我尝试转换为字符串,但自然没有解决问题。

编辑:python-docx 只需要一个字符串。

#This works:
p = document.add_paragraph('1')

#This doesn't:
p = document.add_paragraph(1)
#however the error is unrelated to the issue highlighted above.

如果有人能向我强调我做错了什么,我将不胜感激,因为这让我很困惑。

我今天早上安装了 python-docx,所以它是最新版本,即 python-docx-0.8.10。

【问题讨论】:

  • 链接问题中提出的解决方案与我的不同。在 .astype('str') 之后添加 .values 可以解决问题。正如@DYZ 所说,我试图传递一个系列而不是一个值。
  • 抱歉,这是我关于 SO 的第一个问题,但我如何将其标记为“已回答”?编辑:没关系,我解决了。 :)

标签: python dataframe python-docx


【解决方案1】:

方法document.add_paragraph 需要一个字符串(您应该阅读过文档)。相反,您传递了一个熊猫系列。如果要添加多个段落,则需要循环。

paragraphs = df.loc[df.B=='c', 'A'].astype('str').values
for paragraph in paragraphs:
    document.add_paragraph(paragraph)

【讨论】:

  • 非常感谢。添加 .values 解决了我的问题。也感谢您提供循环。
猜你喜欢
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2021-08-13
相关资源
最近更新 更多