Напишите список формул Python, чтобы преуспеть - PullRequest
0 голосов
/ 30 ноября 2018

Мой сценарий считывает несколько файлов .csv в кадры данных, добавляет все в список кадров данных и объединяет их в RecordKey.

import pandas as pd
demoRaw = pd.read_csv("D2.csv", encoding = 'utf-8')
keyRaw = pd.read_csv("Key.csv", encoding = 'utf-8')
vitalRaw = pd.read_csv("V2.csv", encoding = 'utf-8')

dfs = [key, demo, vital, dx]

df_final = reduce(lambda left,right: pd.merge(left,right,on='Key'), dfs)

Затем я добавляю пустой столбец с именем Meds

df_final["Meds"] = ""

Создание модуля записи в Excel

writer = pd.ExcelWriter('final.xlsx', engine='xlsxwriter')

Назначение длины df и создание пустого списка для формул

length_of_df = len(df_final)
list_of_formulas = []

Этот цикл (кредит W.Dodge) выполняет итерацию формулысоответствует ячейке

for i in range(2,length_of_df+2):
    formula = '=IF(COUNTIFS(Sheet2!A:A,A{0})>0,1,0)'.format(i)
    list_of_formulas.append(formula)

Затем я пытаюсь записать список в столбец Meds

df_final.loc[:, "Meds"] = list_of_formulas

df_final.to_excel(writer, sheet_name='Combined')
meds.to_excel(writer, sheet_name='Meds')

writer.save()

Однако Excel возвращает следующие сообщения об ошибках:

enter image description here

При выборе «Нет» возвращается пустая книга.Выбор Yes возвращает ...

enter image description here

Все остальное сливается нормально, но столбец Meds заполнен нулями, без формул.

Журнал регистрации файлов ремонтов:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error133040_01.xml</logFileName><summary>Errors were detected in file 'C:\Users\4469177\Nate\Work\Coding\Python\scripts\final.xlsx'</summary><removedRecords summary="Following is a list of removed records:"><removedRecord>Removed Records: Formula from /xl/worksheets/sheet1.xml part</removedRecord></removedRecords></recoveryLog>

1 Ответ

0 голосов
/ 30 ноября 2018

У вас есть ошибка в вашей формуле.Вы зачислили W.Dodge, который явно ссылается на этот ответ .Но обратите внимание на формулу в вашем вопросе :

=IF(COUNTIFS(Meds!A:A,B2)>0,1,0)

Обратите внимание на парен, который закрывает COUNTIFS.

...