因此,我目前正在研究一个项目,该项目将包含数据的excel文件散发出光谱(即,一列中的波长,另一列中的吸光度)。有数百个这种性质的excel文件,我希望将它们压缩为一个文件。这主要是因为所有文件的A列(波长)都是相同的,并且只有文件之间的吸收机会。因此,我想从目录中的第一个文件中提取A列和B列,将其写入新的Excel工作表,然后从所有剩余工作表中仅获取B列并将其打印到相同的输出excel文件中。我目前拥有的代码是:
import os
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import glob
import numpy as np
def xlxtract():
for filename in glob.glob('*.xlsx'):
ExcelFile = filename[:-5]
RosewoodData = pd.read_excel(ExcelFile + '.xlsx')
Row = RosewoodData.values.tolist()
ColDataFrame = pd.DataFrame({'Wavelength (nm)': [ x[0] for x in Row], 'Absorbance':[ x[1] for x in Row]})
Writer = ExcelWriter(filename[:-5] + 'TEST' + '.xlsx')
ColDataFrame.to_excel(Writer, 'Sheet1', index=False)
Writer.save()
xlxtract()
我认识到我的代码当前仅读取所有文件并创建一个具有类似名称的单独文件,同时将完全相同的数据打印到新文件中,并且仅添加列名。
如果有人甚至可以向我指出要研究的正确方向,我很乐意亲自调查该问题,但是解决该问题的方法也很好。
答案 0 :(得分:0)
您可能可以执行以下操作:
import pandas as pd
import glob
filelist = glob.glob('*.xlsx')
df_list = []
for file in filelist:
df_temp = pd.read_excel(file, index_col=0)
df_list.append(df_temp)
df = pd.concat(df_list)
df.to_excel('output.xlsx')
这会将所有excel文件读入一个单独的DataFrame中,并以第一列(波长)作为索引。创建所有DataFrame之后,pd.concat将它们合并为1个DataFrame,并使用Wavelength列作为连接键。
答案 1 :(得分:0)
我相信,正如上面@Rahul所述,您需要的是功能 merge 。使用它,您可以轻松地基于公共列合并数据框。您可以查看更多信息here。另外,对于您的特定情况,我想可以解决此问题:
import os
import pandas as pd
import glob
import numpy as np
def xlxtract():
masterDf = pd.DataFrame(columns=["Wavelength (nm)"])
minorDf = pd.DataFrame(columns=["Wavelength (nm)", "Absorvance"])
for filename in glob.glob('*.xlsx'):
minorDf = pd.read_excel(filename)
masterDf = minorDf.merge(masterDf, how = 'outer', on= "Wavelength (nm)")
masterDf.to_excel("result.xlsx")