使用Sheetname作为列导出Dataframe

时间:2017-05-31 13:57:40

标签: python pandas

我有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')

2 个答案:

答案 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。