Я знаю, что было много вопросов об этом сообщении об ошибке.Однако я не нашел ни одного с этой точной проблемой.
Я пытаюсь сгруппировать DataFrame панд и посчитать значения:
allfactor = dataframe.groupby(factor)[reference_area].value_counts()
, где factor и reference_area являются именами столбцов вdataframe.Это работает для некоторых столбцов, таких как DGD015, но не для некоторых других, включая фактор.
Это дает мне ошибку:
ValueError: operands could not be broadcast together with shape (421,) (419,)
Я помещу полное сообщение об ошибке в конце этоговопрос.
Сама группировка работает:
In: grouped = data.groupby(factor)[reference_area]
grouped
Out: <pandas.core.groupby.generic.SeriesGroupBy object at 0x0000000B39D0F5F8>
Я вижу, что это ошибочная широковещательная ошибка, возникающая из-за того, что размеры не имеют одинаковую форму.И для этого есть обходные пути, такие как [:, np.newaxis]
( Research Computing for Earth Sciences * ) или [:,None]
( Как мыслить как ученый-компьютерщик: Обучение на Python 3 )при попытке умножить измерения, которые «не подходят» и из которых нельзя вытянуть ни одного.
Однако я не знаю, как это сделать, когда ошибка возникает в numpy, который вызывается пандами,который вызывается путем вызова value_counts ().
У кого-нибудь есть идея для обхода здесь?
Как я могу получить здесь numpy, чтобы сказать ему просто добавить новые оси, содержащие NAN, чтобы сделатьразмеры соответствуют?
Вот полное сообщение об ошибке:
ValueError Traceback (most recent call last)
ipython-input-5-013b5262b34f> in module>()
----> 1 trial = get_positives_threshold(data, 'SHB23D', 'HV001', threshold=90)
2 print(trial)
ipython-input-3-80d69965e883> in get_positives_threshold(dataframe, factor, reference_area, threshold)
---> 33 allfactor = dataframe.groupby(factor)[reference_area].value_counts()
~\Documents\anaconda3\lib\site-packages\pandas\core\groupby\generic.py in value_counts(self, normalize, sort, ascending, bins, dropna)
-> 1139 labels = list(map(rep, self.grouper.recons_labels)) + [llab(lab, inc)]`
`~\Documents\anaconda3\lib\site-packages\numpy\core\fromnumeric.py in repeat(a, repeats, axis)
421 repeated_array : ndarray
422 Output array which has the same shape as a, except along
--> 423 the given axis.
~\Documents\anaconda3\lib\site-packages\numpy\core\fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
50 try:
51 return getattr(obj, method)(*args, **kwds)
---> 52
53 # An AttributeError occurs if the object does not have
54 # such a method in its class.`
ValueError: operands could not be broadcast together with shape (421,) (419,)
Вот некоторая информация о кадре данных:
Изначально был SPSS-файл .sav, который был преобразован в перофайл.Затем это было прочитано с помощью pandas.read_feather (path_to_file).Данные всего столбца относятся к категории dtype.Исходные значения большинства столбцов содержат NaN, целые числа как строки и строки, но все они хранятся как категориальные.
reference_area HV002 HV003 [...] DGD015 [...] factor [...]
1 '10001' 'NaN' 'Yes' [...] 'Refused' [...] '90' [...]
2 '10001' 'No' 'NaN' [...] '140' [...] '80' [...]
3 '24736' 'Yes' 'No' [...] '78' [...] 'Nan' [...]
4 '24736' 'Yes' 'No' [...] 'Other' [...] 'Technical Problem'
Значения являются репрезентативными, но смешанные, а имена столбцов изменены для маскирования исходных данных.
Pandas версия 0.24.1
Numpy версия 1.15.4
Python версия 3.6.5
Работа с Anaconda 3 в ноутбуке jupyter с указанными версиями в моей среде.
Ожидаемый результат:
In: dataframe.groupby(factor)[reference_area].value_counts()
Out: factor reference_area
0 121640.0 1
1 52675.0 1
181826.0 1
10 40812.0 1
340804.0 2
360756.0 1
100 70679.0 18
70251.0 14
70019.0 13
70728.0 11
120070.0 11
..
Refused 90008.0 1