应用于数据框将第一行值传递给所有行

时间:2019-05-14 14:49:08

标签: python python-3.x pandas python-docx pandas-apply

按以下方式使用Apply时,作为“行”传递的值仅是数据帧第一行的值。

df.apply(make_word_file, axis=1)

奇怪的是,在document.save()中创建的文件名正确。 newname在row ['case_name']中具有正确的值。但是,如果我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)能够打印数据框中每一行的值,而不仅仅是第一行。

为清楚起见进行编辑:

此脚本是一个邮件合并,可生成.docx单词文件。 mapfields是regex:列名格式的字典。 document是docx-python对象。

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

1 个答案:

答案 0 :(得分:1)

这最终是一个循环/ 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")