【问题标题】:Iterating ExcelFile sheets with sheet_name only giving first sheet?使用 sheet_name 迭代 ExcelFile 工作表只给出第一张工作表?
【发布时间】:2019-07-28 03:22:25
【问题描述】:

我正在尝试循环遍历包含 10 张工作表的 excel 文件,并将它们全部放入一个数据框中。我主要使用Data Camp.中的代码

无论出于何种原因,当我复制它时,它只会将我的第一张表迭代 10 次。我还尝试使用 sheet_names 作为 0-Len 工作表名称的范围,以防出现读取问题。有人看到代码有问题吗?

excel_file = pd.ExcelFile(SEC_EXP_PATH)

#The SEC Expense output is spread across a number of sheets. This iterates through them and makes a dataframe for each one.
sheets=range(0,len(excel_file.sheet_names))
sec_expenses=[]
for sheet in sheets:
    expense_sheet=pd.read_excel(SEC_EXP_PATH,sheet_name=sheet, header=1,skipfooter=1)
    sec_expenses.append(expense_sheet)

#combines all of the separate expense dataframes into 1
secexp_df=pd.concat(sec_expenses)

【问题讨论】:

  • 如果您将代码添加到您的问题中会有所帮助。
  • 我做了一点阅读,我会检查我的熊猫版本。看起来他们可能是从 sheetnames 到 sheet_names 的语法更改。可能我安装了旧版本的熊猫

标签: python pandas


【解决方案1】:

应该这样

expense_sheet=pd.read_excel(SEC_EXP_PATH,sheet_name=sheet, header=1,skipfooter=1)

这样说?

expense_sheet=pd.read_excel(excel_file,sheet_name=sheet, header=1,skipfooter=1

【讨论】:

  • 真的应该没关系吗?
  • 你也可以试试dict_of_dfs = excel_file.parse(range(10)),它应该创建一个数据框字典,每张表都有一个键值对
【解决方案2】:

我相信我找到了答案。旧版本的 pandas 似乎使用参数 sheetnames。由于允许使用 kwargs,传递 sheet_name 并没有标记错误,但它也没有按预期运行。更新到较新的 pandas 版本已解决

【讨论】:

    【解决方案3】:

    可能是循环遍历 excel 文件中工作表的更好方法:

    将sheet_name=None 传递给read_csv。您将获得一个字典,其中键是工作表名称,值是数据框:

    sheets = pd.read_excel(SEC_EXP_PATH, sheet_name=None, header=1, skipfooter=1)
    
    for sheet_name, data in list(sheets.items())[:10]:
        sec_expenses = sec_expenses.append(data)
    

    【讨论】:

      猜你喜欢
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 2014-05-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多