【问题标题】:Memory & Value error when Pandas save to new filePandas 保存到新文件时出现内存和值错误
【发布时间】:2020-07-16 05:27:22
【问题描述】:

脚本的简单行。就是从Excel文件中删除一些列,然后保存到一个新文件中。

import pandas as pd
import numpy as np

work_file = "C:\\My Documents\\the_file.xlsx"
df = pd.read_excel(work_file, sheet_name = "Sheet1", index_col = 0)

column_list_to_remove = ["Name","Gender","Register"]

results1 = df.drop(column_list_to_remove, axis=1)

writer = pd.ExcelWriter("C:\\My Documents\\new-file.xlsx")
results1.to_excel(writer,'Sheet1')

writer.save()

它在旧电脑上运行良好,无论大小(数千行)的 Excel 文件。

我现在已升级到具有更大 RAM (16 GB) 的新计算机。当我运行这个脚本时,它在一个小文件(几千行)上很好。但是当它在更大的文件(十万行 Excel)上运行时,它会给我以下错误消息。

我怎样才能纠正这个问题?谢谢。

错误信息:

Traceback (most recent call last):
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 832, in _get_writer
    yield file.write
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 772, in write
    serialize(write, self._root, qnames, namespaces,
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml
    _serialize_xml(write, e, qnames, None,
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml
    _serialize_xml(write, e, qnames, None,
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml
    _serialize_xml(write, e, qnames, None,
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 931, in _serialize_xml
    write(" %s=\"%s\"" % (qnames[k], v))
MemoryError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\My Documents\my_script.py", line 9, in <module>
    writer.save()
  File "C:\Python38\lib\site-packages\pandas\io\excel\_openpyxl.py", line 43, in save
    return self.book.save(self.path)
  File "C:\Python38\lib\site-packages\openpyxl\workbook\workbook.py", line 392, in save
    save_workbook(self, filename)
  File "C:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 293, in save_workbook
    writer.save()
  File "C:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 275, in save
    self.write_data()
  File "C:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 75, in write_data
    self._write_worksheets()
  File "C:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 215, in _write_worksheets
    self.write_worksheet(ws)
  File "C:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 200, in write_worksheet
    writer.write()
  File "C:\Python38\lib\site-packages\openpyxl\worksheet\_writer.py", line 360, in write
    self.close()
  File "C:\Python38\lib\site-packages\openpyxl\worksheet\_writer.py", line 368, in close
    self.xf.close()
  File "C:\Python38\lib\site-packages\openpyxl\worksheet\_writer.py", line 299, in get_stream
    pass
  File "C:\Python38\lib\contextlib.py", line 120, in __exit__
    next(self.gen)
  File "C:\Python38\lib\site-packages\et_xmlfile\xmlfile.py", line 50, in element
    self._write_element(el)
  File "C:\Python38\lib\site-packages\et_xmlfile\xmlfile.py", line 77, in _write_element
    xml = tostring(element)
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 1133, in tostring
    ElementTree(element).write(stream, encoding,
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 772, in write
    serialize(write, self._root, qnames, namespaces,
  File "C:\Python38\lib\contextlib.py", line 131, in __exit__
    self.gen.throw(type, value, traceback)
  File "C:\Python38\lib\xml\etree\ElementTree.py", line 832, in _get_writer
    yield file.write
  File "C:\Python38\lib\contextlib.py", line 525, in __exit__
    raise exc_details[1]
  File "C:\Python38\lib\contextlib.py", line 510, in __exit__
    if cb(*exc_details):
  File "C:\Python38\lib\contextlib.py", line 382, in _exit_wrapper
    callback(*args, **kwds)
ValueError: I/O operation on closed file.

【问题讨论】:

    标签: python excel pandas dataframe io


    【解决方案1】:

    将最后三行代码替换为以下内容:

    with pd.ExcelWriter("C:\\My Documents\\new-file.xlsx") as writer:
        results1.to_excel(writer)
    

    【讨论】:

    • 感谢您的回复。您的在 64 位 Python 中运行良好。我在使用 32 位版本时提出了我的问题。所以现在我无法测试你的答案。
    • 好的。当我回答时,你没有提到任何安装了 32 位 Python 的地方。
    【解决方案2】:

    通过重新安装 64 位 Python 版本解决了该问题。代码没有变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-23
      • 2015-06-14
      • 2013-07-07
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2013-07-04
      • 2021-08-17
      相关资源
      最近更新 更多