这是一个非常基本的python问题,与向现有数据框中添加列有关。为什么会这样
systemctl restart prometheus prometheus-node-exporter
返回以下错误:
ValueError:没有足够的值可解包(预期3,得到0)
但这很好用:
df['Hour'],df['Month'],df['Day'] =""
这对我来说似乎很奇怪,因为在我的脑海中似乎我正在为每个单独的数据帧列分配3个空白条目的序列,而不是为每列分配一组空白。
我是python的新手,所以我肯定答案很明显,但是有人介意向我解释一下吗?
答案 0 :(得分:2)
好吧,很难给出一个答案,而不仅仅是“那是因为这就是定义Python语法的方式”。正在执行的拆包使您可以执行以下操作:
In [63]: a, b = 3, 5
In [64]: a
Out[64]: 3
In [65]: b
Out[65]: 5
In [66]: l = [8, 10]
In [67]: c, d = l
In [69]: c
Out[69]: 8
In [70]: d
Out[70]: 10
也就是说,右侧的元素被解压缩为左侧适当数量的变量。知道了这一点,很明显,您的案例中右侧需要三个元素。
现在您可以 进行以下操作,这也许可以更紧密地映射到您的心理模型:
df['Hour'] = df['Month'] = df['Day'] = ''
答案 1 :(得分:1)
您的左辅助操作符有多个目标。
这称为多重配给。
左侧运算符上的目标数量必须等于右侧运算符上的项目数量:
df['Hour'],df['Month'],df['Day'] = "" # not ok
df['Hour'],df['Month'],df['Day'] = "", "" , "" ok
A, B = 2, 3 # OK
来自grammar
assignment_stmt ::= (target_list "=")+ (starred_expression | yield_expression)
target_list ::= target ("," target)* [","]
target ::= identifier
| "(" [target_list] ")"
| "[" [target_list] "]"
| attributeref
| subscription
| slicing
| "*" target