#python #python-pptx
#python #python-pptx
Вопрос:
Я пытаюсь обновить существующую столбчатую диаграмму в powerpoint deck только одним значением и продолжаю получать это сообщение об ошибке: «TypeError: объект ‘numpy.float64’ не поддается повторению», когда я пытаюсь добавить ряд данных. На этом слайде есть еще одна столбчатая диаграмма, которая содержит 2 значения в ряду данных, и это одно работает совершенно нормально. Кто-нибудь знает, как обновить столбчатую диаграмму, используя только одну точку данных?
chart3=slide_8.shapes[22].chart
chart3=CategoryChartData()
chart3.data.categories=["TV"]
chart3.data.add_series=("Frequency",(slide_8_data.loc["TV Frequency"]["Value"]))
chart3.replace_data(chart3_data)
Ответ №1:
Значение, предоставляемое в качестве второго параметра .add_series()
, должно быть итерируемым, что означает что-то вроде списка или кортежа. Если вы вместо этого предоставите скалярное значение, например, число само по себе (не внутри списка), то вы получите ошибку, о которой упоминали. В общем случае значения для ряда представляют собой последовательность. Таким образом, если это только одно значение, это должен быть список (или кортеж, или 1D ndarray, или, возможно, итератор), содержащий это единственное значение.
Если круглые скобки, окружающие slide_8_data.loc[...
, предназначены для преобразования в кортеж, вам понадобится запятая в конце (особый случай для кортежей с одним значением в Python). (42,)
является кортежем, содержащим единственное значение 42
. (42)
просто 42
заключен в круглые скобки без какой-либо особо полезной причины (группировка по приоритету операторов не выполняется).
Комментарии:
1. Большое вам спасибо!! Итак, как именно вы изменили бы эту строку кода, чтобы она работала? диаграмма 3.data.add_series=(«Частота»,(slide_8_data.loc[«Частота ТВ»][«Значение»]))
2. Вы можете заставить ее работать в случае нарушения с помощью:
chart3.data.add_series=("Frequency",(slide_8_data.loc["TV Frequency"]["Value"],))
(обратите внимание на запятую в конце), но это приведет к ее разрыву в другом месте, еслиslide_8_data.loc["TV Frequency"]["Value"]
иногда преобразуется в скаляр, а в других случаях — в массив. В этом случае вам понадобится некоторая условная логика, возможно, в отдельной функции, для обработки двух случаев и переноса скалярного значения в список или кортеж, когда это произойдет.3. кстати, добро пожаловать в StackOverflow 🙂 Не пренебрегайте ответом, который наилучшим образом отвечает на ваш вопрос. Вот как мы говорим спасибо здесь, на SO 🙂