【问题标题】:Pyodide unable to read xlsx files into pandasPyodide 无法将 xlsx 文件读入 pandas
【发布时间】:2021-11-15 16:47:24
【问题描述】:

我正在尝试使用 pyodide 加载 xlsx 文件。我能够使用以下代码正确加载 xls 文件:

response = await fetch('${fileUrl}')
js_buffer = await response.arrayBuffer()
dFrame = pd.read_excel(BytesIO(js_buffer.to_py()))

但是,当我尝试传递 xlsx 文件时它失败了。我不确定是什么原因造成的。以下是我在测试后已经剔除的潜在问题:

  1. “openpyxl”未正确加载 - 我使用 micropip 加载 openpyxl,当我手动将有效的 xlsx 文件放入内存时 pd.read_excel('filename.xlsx') 工作。所以这不是问题。

感谢您的帮助。

【问题讨论】:

  • 你的意思是当你将文件的URL直接传递给pd.read_excel
  • 两者都不起作用。传递 URL,或者传递上面的函数。即使传递远程在线 URL 也不起作用。
  • 你知道失败的地方吗?该文件被下载并可以在 pyodide 文件系统中看到?然后检查openpyxl的版本可能吗?
  • 它在加载文件的最后一步失败,尽管我能够直接使用 openpyxl 加载文件,然后将其转换为可以工作的数据框。在下面添加了解决方案。

标签: javascript node.js webassembly pyodide


【解决方案1】:

所以,我仍然不确定为什么直接 read_excel 或 Excelfile 函数不起作用(尤其是因为它们只是调用 openpyxl),但我能够通过使用 openpyxl 打开文件然后转换它来使其工作到数据框。工作代码如下:

      response = await fetch('${fileUrl}')
      js_buffer = await response.arrayBuffer()
      wb = openpyxl.load_workbook(BytesIO(js_buffer.to_py()), data_only = True)
      ws = wb.worksheets[0]
      excel_data = ws.values
      columns = next(excel_data)[0:]
      dFrame = pd.DataFrame(excel_data , columns=columns)

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2020-07-07
    • 2021-09-13
    • 1970-01-01
    • 2021-11-05
    • 2015-08-23
    相关资源
    最近更新 更多