Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将直方图从Python导出到Excel_Python_Excel_Pandas - Fatal编程技术网

将直方图从Python导出到Excel

将直方图从Python导出到Excel,python,excel,pandas,Python,Excel,Pandas,我对编码非常陌生,我需要一些关于导出数据或只是在python shell上打印数据的帮助。 代码是: 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.titl

我对编码非常陌生,我需要一些关于导出数据或只是在python shell上打印数据的帮助。 代码是:

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左右。我尝试做的是在装箱后导出数据,因为我尝试写入:

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

它保存的是原始数据,而不是应用了直方图和仓位的数据。另外,如果我能得到一些帮助,了解如何在0到5、5到10等范围内更改存储箱的数量。基本上,它以5的间隔读取数据,一直读到数据的末尾,因此它最终会在数据的最后一位停止并将数据粘贴到存储箱中。任何帮助都是非常感谢的,不必特别感谢。非常感谢。顺便说一句,我认为我是从导入的数据中创建了一个数据帧,还是一个初学者,所以不太确定

df=data.hist(bin=40)
实际上并不创建装箱数据的数据帧
df
最后保存一个numpy
ndarray
,其中包含一个
matplotlib.axes.\u subplot.AxesSubplot
对象

保存装箱数据的一种方法是通过matplotlib的
hist()
创建直方图。在您的
read\u 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.更改为_excel(writer,'Sheet2')
更改为
df.更改为_excel(writer,'Sheet2')

bin
包含每个bin的边,因此
bin
数组将比
counts
数组多一个元素。请记住,上面的代码将每个计数与该计数的箱子的左边缘相关联,而不保存最右边的箱子边缘

也许有更好或更惯用的方法可以做到这一点,但希望上述方法能满足您的需要


编辑:整型箱子宽度

您可以将存储箱边缘的
列表作为
bin=
传递给
data.hist()
plt.hist()
。要创建宽度为5、从0开始并包含数据最大值的存储箱,应执行以下操作:

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

说明:Python内置的
范围(start、stop、step)
只接受整数,并返回包含左端点(
start
)但不包括右端点(
stop
)的列表。(在数学表示法中,
range(start,stop,step)
返回半开区间上的等距整数
[start,stop)
)上行中的
+5
确保最后一个箱子的右边缘位于最大数据值的右侧。

您正在转换一个名为“df1”的变量但您的直方图位于名为“df”的变量中。非常感谢您的帮助,但当我按照您的建议执行操作时,我遇到了一个错误:回溯(最近一次调用):文件“C:\Users\user\Desktop\This one.py”,第7行,在counts,bins,patches=plt.hist(data.values,bins=range(0,max(data.values)+5,5))TypeError:只有整数标量数组可以转换为标量索引如何解决这个问题?@J.Garcia,对不起-我的测试用例使用整数,而您可能有浮点数据。请尝试将
int(…)
环绕
max(data.values)
range
stop
参数转换为整数:
counts,bins,patches=plt.hist(data.values,bins=range(0,int(max(data.values))+5,5))
非常感谢您,它很有效,但是,如果我想制作箱子,我希望您能帮我最后一件事,bin=[a,a]+◇t) 其中a是最左边的垃圾箱和◇ t(Delta t)是我必须定义的箱子宽度◇t作为一个函数?@J.Garcia-无需将deltaT定义为一个函数;如果使用内置的
range()
函数,它只需要是一个整数。(对于浮点范围,请查看
numpy
arange()
函数,但我不认为这太适用于直方图x轴。)但如果您必须自动生成多个绘图,您可能希望编写一个函数来计算所需的增量,而无需每次手动硬编码。