将具有相同结构的多个 Excel 文件中的不同列和工作表中的单元格值传输到单个数据帧中



我在 excel 中有一个报告表,其中包含一组数据点,我想从具有相同格式的多个文件编译到主数据集中。 我采取的第一步是从多个工作表中提取我需要的数据点到一个熊猫数据帧中。请参阅以下步骤

我最初导入了 excel 文件并对其进行了解析

import pandas as pd
xl = pd.ExcelFile(r"C:UsersNicolaDesktopISP 2016-20 Ops-Technical Form.xlsm")
df = xl.parse("FSL, WASH, DRM") #name of sheet #1

然后我找到了合成所需的数据点

a=df.iloc[5:20,3:5]
a1=df.iloc[6:9,10:12]
b=df.iloc[31:35,3:5]
b1=df.iloc[31:35,10:12]

然后,我连接并均衡列定位以维护同一列中的整个值列表:

dfcon=pd.concat(([a,b]))
dfcon2=pd.concat(([a1,b1]))
new_cols = {x: y for x, y in zip(dfcon.columns, dfcon2.columns)}
dfcont2=dfcon2.append(dfcon.rename(columns=new_cols))

最后用我需要的值字符串创建了一个数据框

master=pd.DataFrame(dfcont2)
finalmaster=master.transpose()

接下来,我希望采取的两个步骤是: 1( 为 50 个 excel 文件复制相同的代码 2(将这组Excel文件中的所有值字符串编译为一个单独的pandas数据帧,而无需再次运行此代码,并通过将其导出到Excel中来手动编译。

任何支持将不胜感激。谢谢

我相信需要按glob和最后一起concat创建的文件名循环(所有文件都具有相同的结构(:

import glob
dfs = []
for f in glob.glob('*.xlsm'):
df = pd.read_excel(io=f, sheet_name=1)    
a=df.iloc[5:20,3:5]
a1=df.iloc[6:9,10:12]
b=df.iloc[31:35,3:5]
b1=df.iloc[31:35,10:12]
dfcon=pd.concat(([a,b]))
dfcon2=pd.concat(([a1,b1]))
new_cols = {x: y for x, y in zip(dfcon.columns, dfcon2.columns)}
dfcont2=dfcon2.append(dfcon.rename(columns=new_cols))
dfs.append(dfcont2.T)
out = pd.concat(dfs, ignore_index=True)

找到了适合我的解决方案,感谢您的输入,Jezrael。 进一步解释:

1(从我的桌面目录中导入具有相同结构的文件,解析并选择可以从不同位置提取数据的Excel工作表(iloc(

import glob
dfs = []
for f in glob.glob('C:/Users/Nicola/Desktop/OPS Form/*.xlsm'):
df = pd.ExcelFile(io=f, sheet_name=1) 
df = df.parse("FSL, WASH, DRM")
a=df.iloc[5:20,3:5]
a1=df.iloc[7:9,10:12]
b=df.iloc[31:35,3:5]
b1=df.iloc[31:35,10:12]
c=df.iloc[50:56,3:5]
c1=df.iloc[38:39,10:12]
d=df.iloc[57:61,3:5]
e=df.iloc[63:71,3:5]

2( 串联和重新定位列以组成数据帧的第一个版本(输出(

dfcon=pd.concat(([a,b,c,d,e]))
dfcon2=pd.concat(([a1,b1,c1]))        
new_cols = {x: y for x, y in zip(dfcon.columns, dfcon2.columns)}
dfcont2=dfcon2.append(dfcon.rename(columns=new_cols))
dfs.append(dfcont2.T)

3( 输出呈现相同的值字符串,但从链接到 iloc 位置的递归数据拉出重复两次 [相同的标签和特定于表单的条目]。

output = pd.concat(dfs, ignore_index=True) 

4(最后一个片段仅允许我提取一次标签并选择以奇数排序的所有条目。使用最后一个串联,我生成了我寻找的数据帧,准备进行分析处理。

a=output[2:3]
b=output[1::2]
pd.concat([a,b], axis=0, ignore_index=True)

最新更新