Pandas частично удаляет содержимое ячеек в произвольном порядке

import pandas as pd
import openpyxl
df = pd.read_excel('file.xlsx', sheet_name='Лист1')
with pd.ExcelWriter('file.xlsx', engine="openpyxl", mode="a") as writer:
    df.to_excel(writer, index=False, sheet_name='processing')

Данный код считывает один лист эксель файла и копирует все данные в соседний лист, но при сравнении этих листов выясняется что часть информации утеряна как в исходом листе, так и в новом листе. И каждый раз при выполнении кода затирается разное количество информации.

Но как такое возможно? Если в коде есть четкая команда прочитать первый лист - что заставляет его меняться? Эти же вопросы и к записи нового листа.

Ниже на скрине показывается три разных ячейки с симптомами:

введите сюда описание изображения

Использую версии: Pandas - 1.4.4, Openpyxl - 3.0.10

Интересные наблюдения. Данная проблема у меня проявляется при использовании Jupyter Notebook, но в Pycharm работает хорошо. Отправил другу программисту. Он сказал, что дело походу не только в Jupyter Notebook т.к. у него баг вылез в другой программе (я не уточнил в какой).

Пробовал на 4 разных компьютерах и везде одна и та же проблема. Так же экспериментировал с самой таблицей. Копировал данные в новую таблицу, менял формат ячеек и прочее. Проблема остается.

Моё подозрение, что код как то не верно реагирует на символы, которые есть в тексте т.к. этот текст с тегами. В начальном варианте было много столбцов, но проблемный только один - который в примере. Но я любитель, и высказываю лишь свои предположения т.к. мои варианты решения закончились.

В обязательном порядке выкладываю виновника торжества. Его величество исходный Excel файл.

Спасите, помогите. Устал бороться с проблемой.


Ответы (1 шт):

Автор решения: Namerek

Вот так попробуйте

from html import unescape
from unicodedata import normalize
import pandas as pd

df = pd.read_excel(
    'file.xlsx',
    engine='openpyxl',
    converters={
        'Описание - Description': lambda x: normalize('NFKC', unescape(x))
    }
)

with pd.ExcelWriter('file.xlsx', engine="openpyxl", mode="a") as writer:
    df.to_excel(writer, index=False, sheet_name='processing')
→ Ссылка