为不同的Excel文件自动化直方图

时间:2017-07-04 16:58:03

标签: python excel pandas dataframe

我正在编写一些代码,我需要一些帮助。我编写的代码(在下面发布)必须做一些事情,首先它应该能够从它读取的文件创建一个直方图(它所做的)并相应地对其进行bin。所以这里是我需要帮助的地方,1)我需要找到一种方法将bin宽度更改为我需要的任意宽度(deltaT),而不必每次都进行硬编码,2)我需要一些帮助能够为导入到python中的不同excel文件运行代码,并将它们导出为不同的excel文件。我相信,我不太确定我对编码很陌生,我所处理的是Dataframe。代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import openpyxl
from pandas import ExcelWriter

data = pd.read_excel('/Users/user/Desktop/Data/Book1.xlsx')
counts, bins, patches = plt.hist(data.values, bins=range(0, 
int(max(data.values)+5), 5))
df = pd.DataFrame({'bin_leftedge': bins[:-1], 'count': counts})
plt.title('Data')
plt.xlabel('Neuron')
plt.ylabel('# of Spikes')
plt.show()

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

我尝试将另一个excel文件读取为:

data2 = pd.read_excel('/Users/user/Desktop/Data/Book2.xlsx') 

然后将其放入代码并让它运行,但它只给出第一个excel文件的结果(将其输出到另一个excel文件中)。我究竟做错了什么?非常感谢任何帮助。

更新:

所以我能够让它读取多个文件并在其上运行代码,现在我唯一能解决的是如何让它们作为不同的excel文件导出(使用应用于它们的代码加上bin宽度变化。我把代码改为:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import openpyxl
from pandas import ExcelWriter
import os

for file in os.listdir('/Users/user/Desktop/Data'):
    data = pd.read_excel('/Users/user/Desktop/Data/{0}'.format(file))
    counts, bins, patches = plt.hist(data.values, bins=range(0, 
    int(max(data.values)+5), 5))
    df = pd.DataFrame({'bin_leftedge': bins[:-1], 'count': counts})
    plt.title('Data')
    plt.xlabel('Neuron')
    plt.ylabel('# of Spikes')
    plt.show()

    writer = pd.ExcelWriter('/Users/user/Desktop/Data/ouput.xlsx')
    df.to_excel(writer)
    writer.save()

再次感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

只导出一个文件,因为循环中的命名 output.xlsx Excel文件永远不会更改,因此它会在每次迭代时覆盖。请在下面考虑将 _bins 后缀添加到原始Excel文件中。

datadir = '/Users/user/Desktop/Data/'

for file in os.listdir(datadir):
    if file.endswith('.xlsx'):
       data = pd.read_excel(os.path.join(datadir, file))

       #...data processing and graph output...

       outfile = os.path.join(datadir, file.replace('.xlsx', '_bins.xlsx'))
       writer = pd.ExcelWriter(outfile)
       df.to_excel(writer)
       writer.save()