Ошибка при использовании sum() в Python SFrame
Я новичок в Python и выполняю базовый анализ EDA на двух похожих SFrames. У меня есть словарь в виде двух моих столбцов, и я пытаюсь выяснить, являются ли максимальные значения каждого словаря одинаковыми или нет. В конце я хочу суммировать столбец Value_Match, чтобы я мог знать, сколько значений совпадают, но я получаю неприятную ошибку, и я не смог найти источник. Странно то, что я использовал одну и ту же методологию для обоих фреймов, и только один из них дает мне эту ошибку, но не другой.
Я попытался вычислить max_func различными способами, как указано здесь, но та же ошибка сохранилась: получение ключа с максимальным значением в словаре
Я проверил любые возможные значения NaN в столбце, но не нашел ни одного из них.
Я застрял на этом некоторое время, и любая помощь будет высоко ценится. Спасибо!
Код:
def max_func(d):
v=list(d.values())
k=list(d.keys())
return k[v.index(max(v))]
sf['Max_Dic_1'] = sf['Dic1'].apply(max_func)
sf['Max_Dic_2'] = sf['Dic2'].apply(max_func)
sf['Value_Match'] = sf['Max_Dic_1'] == sf['Max_Dic_2']
sf['Value_Match'].sum()
Ошибка:
RuntimeError Traceback (most recent call last)
<ipython-input-70-f406eb8286b3> in <module>()
----> 1 x = sf['Value_Match'].sum()
2 y = sf.num_rows()
3
4 print x
5 print y
C:\Users\rakesh\Anaconda2\lib\site-
packages\graphlab\data_structures\sarray.pyc in sum(self)
2216 """
2217 with cython_context():
-> 2218 return self.__proxy__.sum()
2219
2220 def mean(self):
C:\Users\rakesh\Anaconda2\lib\site-packages\graphlab\cython\context.pyc in
__exit__(self, exc_type, exc_value, traceback)
47 if not self.show_cython_trace:
48 # To hide cython trace, we re-raise from here
---> 49 raise exc_type(exc_value)
50 else:
51 # To show the full trace, we do nothing and let
exception propagate
RuntimeError: Runtime Exception. Exception in python callback function
evaluation:
ValueError('max() arg is an empty sequence',):
Traceback (most recent call last):
File "graphlab\cython\cy_pylambda_workers.pyx", line 426, in
graphlab.cython.cy_pylambda_workers._eval_lambda
File "graphlab\cython\cy_pylambda_workers.pyx", line 169, in
graphlab.cython.cy_pylambda_workers.lambda_evaluator.eval_simple
File "<ipython-input-63-b4e3c0e28725>", line 4, in max_func
ValueError: max() arg is an empty sequence
1 ответ
Чтобы устранить эту проблему, вы должны посмотреть на трассировку стека. На последней строке мы видим:
File "<ipython-input-63-b4e3c0e28725>", line 4, in max_func
ValueError: max() arg is an empty sequence
Таким образом, Python говорит, что вы стремитесь вычислить максимум списка без элементов. Это тот случай, если словарь пуст. Так что в одном из ваших фреймов данных, вероятно, есть пустой словарь {}
,
Вопрос в том, что делать, если словарь пуст. Вы можете решить вернуть None
в этом случае.
Тем не менее код, который вы пишете, слишком сложен. Более простой и эффективный алгоритм будет:
def max_func(d):
if d:
return max(d,key=d.get)
else:
# or return something if there is no element in the dictionary
return None