Python: ValueError - 解压元素过多(期望 2 个) - 来自 Excel 的数据

9

我想从 Excel 中取数据,并在 Python 中绘制 2D 核密度估计图,但出现了“ValueError: too many values to unpack (expected 2)” 错误。如何解决?以下是代码:

# libraries
import matplotlib.pyplot as plt
from scipy.stats import kde
import pandas as pd
 
# create data
x = pd.read_excel(r'C:\Users\Ezra\Desktop\montex.xlsx')
y = pd.read_excel(r'C:\Users\Ezra\Desktop\montey.xlsx')
 
# Evaluate a gaussian kde on a regular grid of nbins x nbins over data extents
nbins=500
k = kde.gaussian_kde([x,y])
xi, yi = pd.mgrid[x.min():x.max():nbins*100j, y.min():y.max():nbins*100j]
zi = k(pd.vstack([xi.flatten(), yi.flatten()]))
 
# Make the plot
plt.pcolormesh(xi, yi, zi.reshape(xi.shape), shading='auto')
plt.show()
 
# Change color palette
plt.pcolormesh(xi, yi, zi.reshape(xi.shape), shading='auto', cmap=plt.cm.Greens_r)
plt.show()
3个回答

6

当你在代码中遇到错误时,获取实际的回溯信息会有所帮助,特别是指示样本代码哪一行引起错误的那部分。

当你调用一个返回多个值的函数时,可以将其“解包”成单个变量。ValueError:too many values to unpack (expected 2)表示你调用的函数只返回单个值,但你尝试将返回值解包为两个变量。

例如,考虑这个小Python脚本:

def returns_1_val(): 
    return 'one'

def returns_2_vals(): 
    return 'one', 'two'

print(returns_2_vals())

# Unpack the return value.
x,y = returns_2_vals()
print('x', x)
print('y', y)

print(returns_1_val())

# This next call fails.  We're "expecting" Python to unpack 2 values into 
# x and y, but it fails because the function only returned one value.   
x,y = returns_1_val()

当你运行它时:

('one', 'two')
x one
y two
one
Traceback (most recent call last):
  File "unpack_err.py", line 11, in <module>
    x,y = returns_1_val()
ValueError: too many values to unpack (expected 2)

更加通俗易懂的错误信息使问题更加明确。例如,如果你试图调用x,y,z = return_2_vals(),你会得到以下错误信息:

ValueError: unpack的值不足 (期望3个,但只有2个)


6
我认为Tom Bryan的回答是不正确的。你的错误提示是:"ValueError: too many values to unpack (expected 2)",这与Tom给出的相反例子相反。
Tom说"ValueError: too many values to unpack (expected 2)"的意思是你调用了一个只返回单个值的函数。我认为这是错误的,它的意思是你调用了一个返回超过两个值的函数。你的函数可能正在尝试将超过两个的值赋给仅有两个变量。

0
尝试将'x'和'y'作为独立的参数传递给gaussian_kde函数。 来自数据框的'x'和'y'是相同的。 让这些参数不同。

1
根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Shawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接