簡體   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