Я разделил блок данных "full_df2" с помощью столбца "фильтр". Затем я помещаю различные имена групп фильтров в список "unique_list". Я хочу выполнить итерацию через свой фреймворк с помощью следующего кода, чтобы я мог получить график для каждой группы. "Рейтинг" и "hhs" - это столбцы в моем кадре данных, на которые я буду запускать регрессию.
Когда я запускаю код ниже, я получаю эту ошибку. ValueError: слишком много значений для распаковки (ожидается 4). Я попытался добавить.split(',') в конце строки 2, но он не помогает. Я занимаюсь серфингом через доски, пытаясь преодолеть эту ошибку. Я новичок в Python. Таким образом, любая помощь и объяснение были бы весьма признательны.
Вот некоторые примеры данных и реальный код, который я использовал.
full_df2 = np.array([['Letter', 'Sync', 'Status', 'filter', 'Rating', 'hhs'],
['A', 'And', 'Off', 'A And Off', .4, 300],
['A', 'And', 'On', 'A And On', .5, 300]
['A', 'Or', 'Off', 'A Or Off', .7, 300]
['A', 'Or', 'On', 'A Or On', .3, 300]
['A', 'Between', 'Off', 'A Between Off', .6, 300]
['A', 'Between', 'On', 'A Between On', .4, 300]
['A', 'And', 'Off', 'A And Off', .6, 400],
['A', 'And', 'On', 'A And On', .4, 400]
['A', 'Or', 'Off', 'A Or Off', .3, 400]
['A', 'Or', 'On', 'A Or On', .4, 400]
['A', 'Between', 'Off', 'A Between Off', .3, 400]
['A', 'Between', 'On', 'A Between On', .8, 400]
['A', 'And', 'Off', 'A And Off', .4, 250],
['A', 'And', 'On', 'A And On', .5, 250]
['A', 'Or', 'Off', 'A Or Off', .7, 250]
['A', 'Or', 'On', 'A Or On', .3, 250]
['A', 'Between', 'Off', 'A Between Off', .6, 250]
['A', 'Between', 'On', 'A Between On', .4, 250]
])
unique_df = dict(tuple(full_df2.groupby(['Letter', 'Sync', 'Status', 'filter'])))
unique_list = ([x[-1] for x in unique_df])
for x in unique_list:
print (x)
for p in unique_list:
slope, intercept, r_value, p_value, std_err = stats.linregress(full_df2.query("filter == @p")[['rating']], full_df2.query("filter == @p")[['hhs']])
filter_df = full_df2.query("filter == @p")
ax = sns.regplot(x="rating", y="hhs", data=filter_df, color='b',
line_kws={'label':"y={0:.1f}x+{1:.1f}".format(slope,intercept)})
ax.legend()
ax.set_title(p)
plt.show()
print(slope)
Это полная ошибка:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-29-75511dada630> in <module>()
1 for p in unique_list:
----> 2 slope, intercept, r_value, p_value, std_err = stats.linregress(full_df2.query("filter == @p")[['rating']], full_df2.query("filter == @p")[['hhs']])
3 #result = [stats.linregress(data[key]['num'],data[key]['com']) for key in keys]
4 #slope, intercept, r_value, p_value, std_err =
5 #.split(',')
~\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\stats\_stats_mstats_common.py in linregress(x, y)
91
92 # average sum of squares:
---> 93 ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat
94 r_num = ssxym
95 r_den = np.sqrt(ssxm * ssym)
ValueError: too many values to unpack (expected 4)
Согласно нашим комментариям выше, проблема, которую вы имеете, - это форма вашего ввода. Самый простой способ заставить его работать - изменить вход linregress
на это:
stats.linregress(full_df2.query("filter == @p")['rating'], full_df2.query("filter == @p")['hhs'])
Лично я бы написал его следующим образом:
stats.linregress(full_df2.loc[full_df2.filter == p, 'rating'], full_df2.loc[full_df2.filter == p, 'hhs'])