根据工作表名称在多个Excel工作簿中创buildfor循环中的数据框?

我有一个数百个Excel文件的文件夹,每个工作簿中都有九个相同的文件夹。 我正在运行下面的代码遍历文件,并为所有工作簿中的每个工作表创build一个数据框(因此dataframe“sheet_a_df”将从连接到单个数据框的每个工作簿中打印出“a”)。

sheet_a_df = pd.DataFrame() for file in glob.glob('C:\\Users\*.xlsx'): df = pd.read_excel(file,sheetname='a') sheet_1_df = sheet_1_df.append(df,ignore_index=True).dropna() sheet_b_df = pd.DataFrame() for file in glob.glob('C:\\Users\\*.xlsx'): df = pd.read_excel(file,sheetname='b') sheet_b_df = sheet_b_df.append(df,ignore_index=True).dropna() # And so on for all nine sheet names... 

但是,这需要复制并粘贴代码九次(每个表单一次)。

有没有更适当的方法来做到这一点?

回顾一下这个问题 ,我理解字典是在for循环中创build多个数据框的方法。 我也试图根据工作表名称命名每个df 。 我创build了我的工作表名称列表,并尝试了下面的代码,但得到一个KeyError,它只是返回第一个工作表的名字。

 sheet_names = ['a', 'b', 'c', ...,] df_dict = {} for file in glob.glob('C:\\Users\*.xlsx'): for sheet in sheet_names: df = pd.read_excel(file,sheetname=sheet) df_dict[sheet] = df_dict[sheet].append(df) 

有没有办法解决上面的代码来创build所有九个dfs,同时根据他们来自的工作表命名?

您可以利用如下事实,即如果将一个表名list传递给pd.read_excel函数的sheetname参数,它将返回一个数据pd.read_excel字典,其中的键是表名,值是与这些数据框对应的数据框工作表名称。 因此,下面应该给你一个连接dataframe的字典:所有的“a”dataframe在一起,所有的“b”dataframe在一起,等等。

 sheet_names = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'] data = {} for fn in glob.glob('C:\\Users\*.xlsx'): dfs = pd.read_excel(fn, sheetname=sheet_names) for k in dfs: data.setdefault(k, pd.DataFrame()) data[k] = pd.concat([data[k], dfs[k]]) 

现在data应该是一个数据sheet_names字典,其中包含来自sheet_names元素的键。 它的值是来自文件的相应表格名称的连接数据框。

我希望这有帮助。

您正试图将dataframe附加到不存在的字典项目。 您应该首先检查密钥是否存在:

 for file in glob.glob('C:\\Users\*.xlsx'): for sheet in sheet_names: df = pd.read_excel(file,sheetname=sheet) if sheet in df_dict: df_dict[sheet] = df_dict[sheet].append(df) else: df_dict[sheet] = df