Pandas и непоследовательная замена значений Excel

Я использую синтаксис ниже, чтобы заменить только определенные значения в столбце 'content_text' на основе столбца macro_id в моей таблице, но результаты очень непоследовательны. По сути, макросы — это числа, которые представляют текст, и все они единообразны по количеству символов и разделителям, однако я не могу понять, почему некоторые идентификаторы макросов никогда не заменяются. Бывают случаи, когда в поле контекста есть несколько macro_id, но иногда они не заменяются, когда есть только один. Всего около 4200 строк, и я очень надеюсь, что мой ноутбук не просто выбивает данные.

Пример:
Что у меня есть

Что должно вернуться

Я использую Visual Studio 2019, и иногда при запуске codeа я получаю не менее 8 строк, которые не были преобразованы, и их число достигает 186.

Я выборочно проверил несколько macro_id и подтвердил, что они действительны и привязаны к тексту. Значения на исходном листе загружались напрямую из Power Query, и я играл с изменением типа поля с числа на текст, и именно там я вижу колебания в строках, которые не были преобразованы. Я вставлял значения как текст на отдельные листы для форматирования xlsx и csv, но я никогда не получаю 100% замены. Что я могу делать неправильно?

import pandas as pd
import re

# Read the large spreadsheet with 11 thousand rows
df = pd.read_excel('testmacros.xlsx')


# Handle NaN values in 'content_text' column
df['content_text'] = df['content_text'].fillna('')


# Update values in the 'content_text' column using the map function
s = df.astype({'macro_id': str}).set_index('macro_id')['content_text']

pattern = r'\b(%s)\b' % '|'.join(map(re.escape, s.index))

df['content_text'] = (df['content_text']
                            .str.replace(pattern,
                                         lambda m: s.get(m.group(0)),
                                         regex=True)
                           )

# Save the updated large spreadsheet
df.to_excel('updatedmacros.xlsx', index=False)
Елена
Вопрос задан3 января 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.