ValueError:没有足够的值来解包(预期为 2,得到 1)当试图在 python 中解包 dict 以使用 pandas 进行数据标记时
Posted
技术标签:
【中文标题】ValueError:没有足够的值来解包(预期为 2,得到 1)当试图在 python 中解包 dict 以使用 pandas 进行数据标记时【英文标题】:ValueError: not enough values to unpack (expected 2, got 1) when trying to unpack dict in python for data labeling with pandas 【发布时间】:2020-06-01 05:11:26 【问题描述】:我创建了一个字典,将每个 api 端点从我的后端标记到一个产品组。 目前,我正在尝试在 python 3.7.6 中使用该字典进一步标记我从 NewRelic 获得的 csv 中的所有数据以及来自所有事务的数据(平均延迟、请求计数等)。 代码如下:
response = requests.request(
"GET", self.url,
auth=(self.user, self.password)
)
with open(
"data.csv",
"w",
encoding='utf8'
) as jfp:
jfp.write(response.text)
doc = pd.DataFrame(pd.read_csv(self.path, sep=";"))
doc_dic = pd.Series(doc.ProductGroup.values, index=doc.Action).to_dict()
resp = pd.DataFrame(pd.read_csv("data.csv", sep=","))
for k, v in doc_dic:
if k == resp.Action:
resp.insert(0, "Product Group", v)
但我收到以下错误:
Traceback(最近一次调用最后一次):
File "C:/Project/Dev/analytics/app/data.py", line 53, in <module>
Data().csv_data()
File "C:/Project/Dev/analytics/app/data.py", line 42, in csv_data
for k, v in obj:
ValueError: not enough values to unpack (expected 2, got 1)
在dict obj中,键是api端点,值是每个api端点所属的产品组。 预期的行为是,在将字典与作为请求响应返回的 csv 文件进行比较后,pandas 会为每个端点插入一个包含正确产品组的列(产品组的索引 0 和端点的索引 1)。 我该怎么做才能得到这个输出?
【问题讨论】:
在 for 循环中尝试doc_dic.items()
看起来 csv 文件格式不正确 - 意思是,有些行只有一列,即 key
而没有 value
。如果您有默认缺失值,则可以使用 defaultdict - pandas.pydata.org/pandas-docs/stable/reference/api/…
【参考方案1】:
替换你的代码:
for k, v in doc_dic:
if k == resp.Action:
resp.insert(0, "Product Group", v)
与:
for k, v in doc_dic.items():
if k == resp.Action:
resp.insert(0, "Product Group", v)
【讨论】:
谢谢。它工作得很好。我现在只是有另一个错误,但我认为这是因为 csv 有一些未在 dict 内标记的端点(ValueError:一个系列的真值是不明确的。使用 a.empty,a.bool(),a。 item()、a.any() 或 a.all())。【参考方案2】:你需要做的:for k, v in doc_dic.items()
【讨论】:
以上是关于ValueError:没有足够的值来解包(预期为 2,得到 1)当试图在 python 中解包 dict 以使用 pandas 进行数据标记时的主要内容,如果未能解决你的问题,请参考以下文章
python OpenCV中的ValueError - 没有足够的值来解包(预期3,得到2)
ValueError:没有足够的值来解包(预期 3,得到 2)。啥地方出了错? [复制]
ValueError:没有足够的值来解包(预期为 2,得到 1)当试图在 python 中解包 dict 以使用 pandas 进行数据标记时