繁体   English   中英

将直方图从Python导出到Excel

[英]Exporting Histogram from Python to Excel

我对编码很新,我需要帮助导出数据或者只是在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左右。 我试图做的是在我尝试写入以来从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最终拿着一个包含matplotlib.axes._subplots.AxesSubplot对象的numpy ndarray

保存分箱数据的一种方法是通过matplotlib的hist()创建直方图。 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阵列。 请记住,上面的代码将每个计数与该计数的bin的边缘相关联,并且不保存最右边的bin边缘。

可能有更好的或熊猫惯用的方式来做到这一点,但希望以上满足您的需求。


编辑:整数bin宽度

您可以将bin边缘list作为bins=传递给data.hist()plt.hist() 要创建宽度为5且从0开始并包含数据的最大值的bin,这应该有效:

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

说明:Python的内置range(start, stop, step)仅接受整数,并返回包含左端点( start )但排除右端点( stop )的列表。 (在数学符号中, range(start, stop, step)在半开区间[start, stop) range(start, stop, step)返回均匀间隔的整数。)上面一行中的+5确保最后一个bin的右边缘在右侧结束最大数据值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM