Python, Pandas записывают в dataframe, lxml.etree.SerialisationError: IO_WRITE - PullRequest
0 голосов
/ 23 октября 2018

Код для выбора нужных строк из кадра данных.Исходные данные в формате Excel, и я поместил их здесь.

Я хочу выбрать все строки «Дата теста» в «201506» и «201508» и записать их в файл Excel.Строки работают нормально.

import pandas as pd

data_short = {'Contract_type' : ["Other", "Other", "Type-I", "Type-I", "Type-I", "Type-II", "Type-II", "Type-III", "Type-III", "Part-time"],
'Test Date': ["20150816", "20150601", "20150204", "20150609", "20150204", "20150806", "20150201", "20150615", "20150822", "20150236" ],
'Test_time' : ["16:26", "07:39", "18:48", "22:32", "03:54", "03:30", "04:00", "22:02", "13:43", "10:29"],
}

df = pd.DataFrame(data_short)

data_201508 = df[df['Test Date'].astype(str).str.startswith('201508')]
data_201506 = df[df['Test Date'].astype(str).str.startswith('201506')]

data_68 = data_201506.append(data_201508)

writer = pd.ExcelWriter("C:\\test-output.xlsx", engine = 'openpyxl')
data_68.to_excel(writer, "Sheet1", index = False)
writer.save()

Но когда я применил их к большему файлу, ~ 600 000 строк с 25 столбцами (размер файла 65 МБ), он возвращает сообщение об ошибке, как показано ниже:

Traceback (most recent call last):
  File "C:\Python27\Working Scripts\LL move pick wanted ATA in months.py", line 15, in <module>
    writer.save()
  File "C:\Python27\lib\site-packages\pandas\io\excel.py", line 732, in save
    return self.book.save(self.path)
  File "C:\Python27\lib\site-packages\openpyxl\workbook\workbook.py", line 263, in save
    save_workbook(self, filename)
  File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 239, in save_workbook
    writer.save(filename, as_template=as_template)
  File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 222, in save
    self.write_data(archive, as_template=as_template)
  File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 80, in write_data
    self._write_worksheets(archive)
  File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 163, in _write_worksheets
    xml = sheet._write(self.workbook.shared_strings)
  File "C:\Python27\lib\site-packages\openpyxl\worksheet\worksheet.py", line 776, in _write
    return write_worksheet(self, shared_strings)
  File "C:\Python27\lib\site-packages\openpyxl\writer\worksheet.py", line 263, in write_worksheet
    xf.write(worksheet.page_breaks.to_tree())
  File "src/lxml/serializer.pxi", line 1016, in lxml.etree._FileWriterElement.__exit__ (src\lxml\lxml.etree.c:142025)
  File "src/lxml/serializer.pxi", line 904, in lxml.etree._IncrementalFileWriter._write_end_element (src\lxml\lxml.etree.c:140218)
  File "src/lxml/serializer.pxi", line 999, in lxml.etree._IncrementalFileWriter._handle_error (src\lxml\lxml.etree.c:141711)
  File "src/lxml/serializer.pxi", line 195, in lxml.etree._raiseSerialisationError (src\lxml\lxml.etree.c:131087)
lxml.etree.SerialisationError: IO_WRITE

Означает ли это, что компьютер недостаточно хорош (8 ГБ, Win10)?Есть ли способ оптимизировать код (например, потреблять меньше памяти)?Спасибо.

Кстати: вопрос похож на Ошибка ввода-вывода при сохранении файла Excel - Python , но решение не найдено ...

1 Ответ

0 голосов
/ 23 октября 2018

нашел решение: вместо этого запишите вывод в csv (в любом случае его можно открыть и в Excel)

data_wanted_all.to_csv("C:\\test-output.csv", index=False)

отправьте сюда сообщение, если кто-то столкнется с такой же проблемой.дайте мне знать, если этот вопрос будет удален.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...