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 进行数据标记时

Python 2 - ValueError:没有足够的值来解包(预期 6,得到 1)

ValueError:没有足够的值来解包(预期2,得1)

OPEN_CV 错误没有足够的值来解包(预期 3,得到 2)[重复]