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