我有40个左右的excel文档,我想将第一张工作表读入Dataframe,然后将组合工作表导出到csv文件。下面的代码到目前为止工作,但我还需要添加一个具有导入的工作表名称的列。每个工作簿的工作表名称都不同。我基本上想要替换' WorsksheetName'下面是实际的工作表名称。
import pandas as pd
import numpy as np
import glob
import openpyxl
glob.glob("..\*.xlsx")
all_data = pd.DataFrame()
for f in glob.glob("M:\Completed\*.xlsx"):
df = pd.read_excel(f,sheetname=1)
df['Sheet'] = 'WorksheetName'
all_data = all_data.append(df,ignore_index=True)
all_data.to_csv('Workoad.csv')
答案 0 :(得分:1)
如果使用设置sheetname=None
,pandas会将工作簿的所有工作表导入到字典中,其中键是工作表名称,值是工作表本身的数据框。使用此功能,您可以执行以下操作:
import pandas as pd
import numpy as np
import glob
import openpyxl
all_data = pd.DataFrame()
for f in glob.glob("M:\Completed\*.xlsx"):
sheets_dict = pd.read_excel(f, sheetname=None)
for name, frame in sheets_dict.items():
frame['Sheet'] = name
all_data = all_data.append(frame, ignore_index=True)
all_data.to_csv('Workload.csv')
您当前的设置似乎只保留工作簿的第二张 - 您可以通过在name
上使用某种过滤器来完成此操作。
答案 1 :(得分:0)
您可以使用pd.ExcelFile
检索工作表名称,如下所示。
import pandas as pd
import glob
all_data = []
for f in glob.glob("M:\Completed\*.xlsx"):
xl = pd.ExcelFile(f)
sheet = xl.sheet_names[0]
df = xl.parse(sheet)
df['Sheet'] = sheet
all_data.append(df)
pd.concat(all_data).to_csv('Workoad.csv')
使用pd.concat
代替df.append
的更改可能会加快某些速度 - 这样您只需要为每个添加一次构建一次新数据帧,而不是四十次。我也改变了所选的索引。如果您确实想要第二张,请随意将其更改为sheet = xl.sheet_names[1]
; python及其包通常从零开始计算,即使在处理从1开始的程序时也是如此,例如excel。