Применить на Dataframe передает значения первой строки во все строки - PullRequest
1 голос
/ 14 мая 2019

При использовании метода применения, описанного ниже, значения, которые передаются как «строка», являются исключительно значениями из первой строки кадра данных.

df.apply(make_word_file, axis=1)

Как ни странно, имя файла, созданное в документе.сохранить () правильно.newname имеет правильные значения в строке ['case_name'].Однако, если I print(row), он печатает значения из первой строки.

def make_word_file(row):
    for key, value in mapfields.items():
#         print(row)
        regex1 = re.compile(key)
        replace1 = str(row[value])
        docx_replace_regex(document, regex1 , replace1)

    newname = remove(row['case_name'], '\/:*?"<>|,.')
    print(newname)
    document.save(datadir + row["datename"] + "_" + row["court"] + "_" + newname + ".docx")

Я ожидал, что print(row) напечатает значения из каждой строки в кадре данных, а не только в 1-м.

РЕДАКТИРОВАТЬ для ясности:

Этот скрипт представляет собой почтовое слияние, которое создает файлы слов .docx.mapfields - это диктовка в формате regex: имя столбца.document является объектом docx-python.

mapfields = {
"VARfname": "First Name",
"VARlname": "Last Name",
}

1 Ответ

1 голос
/ 14 мая 2019

В итоге это стало проблемой loop / python-docx, а не пандой.

Объект document перезаписывался, и регулярное выражение ничего не могло найти после первого. Загрузка шаблона документа в функцию исправила проблему.

def make_word_file(case_row):
    document_template = Document(directory + fname)
    document = document_template
    for key, value in mapfields.items():
        regex1 = re.compile(key)
        replace1 = str(case_row[value])
        docx_replace_regex(document, regex1 , replace1)

    document.save(location + ".docx")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...