Экспорт гистограммы из Python в Excel

Я довольно новичок в кодировании, и мне нужно помочь с экспортом данных или просто распечатать его на оболочке python. Код:

import pandas as pd import numpy as np import matplotlib.pyplot as plt import openpyxl data = pd.read_excel('/Users/user/Desktop/Data/Book1.xlsx') df = data.hist(bins=40) plt.xlim([0,1000]) plt.title('Data') plt.xlabel('Neuron') plt.ylabel('# of Spikes') plt.show() 

Таким образом, код делает гистограмму после извлечения данных в 40 ящиков, диапазон от 0 до 1558,5 или около того. То, что я пытаюсь сделать, это экспортировать данные AFTER binning с тех пор, как я попытаюсь написать:

 writer = pd.ExcelWriter('/Users/user/Desktop/Data/output.xlsx') df1.to_excel(writer,'Sheet2') writer.save() 

он сохраняет исходные данные, а не данные, на которые была нанесена гистограмма, и на них были применены бункеры. Кроме того, если я могу получить некоторую помощь в том, как изменить количество ячеек в диапазоне от 0 до 5, от 5 до 10 и т. Д., В основном он читается с интервалом 5, вплоть до конца данных, поэтому он В конце концов, вы остановитесь на последнем бите данных и вставьте эти данные в корзину. Любая помощь приветствуется, и она не должна быть конкретно пандами. Спасибо. Кстати, я думаю, что то, что я сделал, было Dataframe из импортированных данных, опять же новичок, поэтому не так уверен.

Строка df = data.hist(bins=40) фактически не создает DataFrame данных с биннами. df заканчивается тем, что содержит numpy ndarray , содержащий объект matplotlib.axes._subplots.AxesSubplot .

Одним из способов сохранения данных с биннами является создание гистограммы через hist() matplotlib. Добавьте следующие строки непосредственно после строки read_excel :

 import matplotlib.pyplot as plt counts, bins, bars = plt.hist(data.values, bins=40) df = pd.DataFrame({'bin_leftedge': bins[:-1], 'count': counts}) 

Затем, как указано в комментарии, обязательно измените df1.to_excel(writer,'Sheet2') на df.to_excel(writer,'Sheet2') .

bins содержат края каждого бункера, поэтому массив bins будет иметь еще один элемент, чем массив counts . Имейте в виду, что приведенный выше код связывает каждый счет с левым краем ячейки этого счета и не сохраняет край правого края.

Там может быть лучший или панд-идиоматический способ сделать это, но, надеюсь, это соответствует вашим потребностям.


EDIT: ширина целых бинов

Вы можете передать list ребер bins= виде bins= к data.hist() или plt.hist() . Чтобы создать ячейки шириной 5, которые начинаются с 0 и включают максимальное значение данных, это должно работать:

 counts, bins, patches = plt.hist(data.values, bins=range(0, max(data.values)+5, 5)) 

Объяснение: Встроенный range(start, stop, step) Python range(start, stop, step) принимает только целые числа и возвращает список, который включает левую конечную точку ( start ), но исключает правую конечную точку ( stop ). (В обозначениях математики range(start, stop, step) возвращает равномерно разнесенные целые числа на полуоткрытом интервале [start, stop) .) +5 в приведенной выше строке гарантирует, что правый край последнего бина заканчивается с правой стороны от максимального значения данных.

  • Разница Pivot_table Pandas и excel
  • Пустая ячейка от excel в pandas df
  • Целый лист в рамке данных panda с xlwings
  • Счет группы pandas возвращает только столбец?
  • Значения столбцов и итератор столбца столбца
  • Python: вытащить потоковые данные Excel в dataframe
  • Как я могу прочитать диапазон («A5: B10») и поместить эти значения в фреймворк с использованием openpyxl
  • Pandas: изменение названия в столбцах с возможностью лямбда-функции / Обратная связь
  • Pandas / Python - Манипуляция данными Excel
  • Использовать Vlook_up используя Python
  • Pandas: ascii codec can not encode character в позиции порядкового номера не в диапазоне - какая ячейка?
  • Interesting Posts
    Давайте будем гением компьютера.