ValueError:列的长度必须与具有多个输出的键的长度相同

Posted

技术标签:

【中文标题】ValueError:列的长度必须与具有多个输出的键的长度相同【英文标题】:ValueError: Columns must be same length as key with multiple outputs 【发布时间】:2022-01-23 01:58:24 【问题描述】:

我正在从 Excel 单元格中提取一个子字符串,整个字符串显示如下:

The bolts are 5" long each and 3" apart

我想提取螺栓的长度为5"。我使用下面的代码来得到它

df['Bolt_Length'] = df['Description'].str.extract(r'(\s[0-9]")',expand=False)

但如果字符串显示以下内容:

The bolts are 10" long each and 3" apart

我尝试使用以下代码:

df['Bolt_Length'] = df['Description'].str.extract(r'(\s(\d1,2)")',expand=False)

我收到以下错误消息:

ValueError: Columns must be same length as key

我认为 Python 不知道要获取哪个数字。 10"3"

我该如何解决这个问题?如何告诉 Python 只选择第一个 "

另一方面,如果我想同时获得螺栓长度和与另一个螺栓的距离怎么办?如何同时提取两者?

【问题讨论】:

【参考方案1】:

发生错误是因为您的正则表达式包含 two 捕获组,它们提取 two 列值,但您将它们分配给 single 列, df['Bolt_Length'].

您需要在正则表达式模式中使用与您分配值的列一样多的捕获组

df['Bolt_Length'] = df['Description'].str.extract(r'\s(\d1,2)"',expand=False)

\s(\d1,2)" 正则表达式仅包含一对未转义的括号,它们构成一个捕获组,因此这可以正常工作,因为该单个值被分配给单个 Bolt_Length 列。

【讨论】:

【参考方案2】:

您的问题是您的第二个正则表达式(\s(\d1,2)") 中有两个捕获组,而不是一个。所以基本上,你是在告诉 Python 得到数字 with "and 相同的数字 without ":

>>> df['Description'].str.extract(r'(\s(\d1,2)")', expand=False)
      0   1
0    5"   5
1   10"  10

您可以在组的左括号之后添加?:,使其不会捕获任何内容,尽管它仍然作为一个组起作用。以下内容使得不包括" 的内部组不捕获:

#                                notice vv
>>> df['Description'].str.extract(r'(\s(?:\d1,2)")', expand=False)
0      5"
1     10"
Name: Description, dtype: object

【讨论】:

以上是关于ValueError:列的长度必须与具有多个输出的键的长度相同的主要内容,如果未能解决你的问题,请参考以下文章

连接两个 NumPy 数组给出“ValueError:所有输入数组必须具有相同的维数”

ValueError: Tensor 必须来自与 Tensorflow 中具有双向 RNN 的 Tensor 相同的图

如何修复'ValueError:输入张量必须具有等级 4'?

ValueError:尝试对 IMDB 评论进行分类时,logits 和标签必须具有相同的形状((无,1)与(无,10000))

ValueError:新名称的长度必须为 1,得到 2

NLP/TF-IDF: ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()