我使用this code,这是有用的。现在在较小的'rep_list'当它执行列表中的第一个代表时,CP会添加它,但是当它转到AM时它会覆盖CP。现在,当我运行此代码时,它实际上只保存循环中的最后一个人。如果我只使用" CP"运行代码然后只是" AM"它按原样附加它。 for循环有问题吗?或者是工作簿本身的问题?
import pandas as pd
import datetime
from openpyxl import load_workbook
now = datetime.datetime.now()
currentDate = now.strftime("%Y-%m-%d")
call_report = pd.read_excel("Ending 2016-07-30.xlsx", "raw_data")
#rep_list = ["CP", "AM", "JB", "TT", "KE"]
rep_list = ["CP", "AM"]
def call_log_reader(rep_name):
rep_log = currentDate + "-" + rep_name + ".csv"
df = pd.read_csv(rep_log)
df = df.drop(['From Name', 'From Number', 'To Name / Reference', 'To Number', 'Billing Code', 'Original Dialed Number',
'First Hunt Group', 'Last Hunt Group'], axis=1)
df['rep'] = rep_name
book = load_workbook('Ending 2016-07-30.xlsx')
writer = pd.ExcelWriter('Ending 2016-07-30.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, "raw_data", index=False)
writer.save()
## I tried adding this : writer.close() hoping it would close the book and then force it to reopen for the next rep in the loop but it doesn't seem to work.
for rep in rep_list:
call_log_reader(rep)
非常感谢你!
编辑:
Gaurav Dhama给出了一个很好的答案。他指出,Pandas excelwriter (refer to this link)存在一些限制,并提出了一个解决方案,其中每个代表最终获得自己的工作表。这很有效,但是在我考虑之后,我选择了额外的工作表并提出了解决方案,知道存在限制。基本上,我添加了一个CSV而不是实际的XLSX文件,然后在最后打开该CSV并将一个大的列表附加到XLSX文件中。任何一个都可以,只取决于你最终的产品是什么样的。
import pandas as pd
import datetime
from openpyxl import load_workbook
now = datetime.datetime.now()
currentDate = now.strftime("%Y-%m-%d")
call_report = "Ending 2016-07-30.xlsx"
#rep_list = ["CP", "AM", "JB", "TT", "KE"]
rep_list = ["CP", "AM"]
csv_to_xl_files = []
merged_csv = currentDate + "-master.csv"
def call_log_reader(rep_name):
rep_log = currentDate + "-" + rep_name + ".csv"
df = pd.read_csv(rep_log)
df = df.drop(['TimestampDetail', 'Billing Code', 'From Name', 'From Number', 'To Name / Reference', 'To Number',
'Original Dialed Number', 'First Hunt Group', 'Last Hunt Group'], axis=1)
df['rep'] = rep_name
#print (df.head(3))
df.to_csv(merged_csv, mode='a', index=False, header=False)
csv_to_xl_files.append(rep_log)
book = load_workbook(call_report)
writer = pd.ExcelWriter(call_report, engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
for rep in rep_list:
call_log_reader(rep)
master_df = pd.read_csv(merged_csv)
master_df.to_excel(writer, "raw_data", index=False)
writer.save()
#this csv_to_xl_files list isn't finished yet, basically I'm going to use it to delete the files from the directory as I don't need them once the script is run.
print (csv_to_xl_files)
答案 0 :(得分:1)
尝试使用以下内容:
import pandas as pd
import datetime
from openpyxl import load_workbook
now = datetime.datetime.now()
currentDate = now.strftime("%Y-%m-%d")
call_report = pd.read_excel("Ending 2016-07-30.xlsx", "raw_data")
#rep_list = ["CP", "AM", "JB", "TT", "KE"]
rep_list = ["CP", "AM"]
def call_log_reader(rep_name):
rep_log = currentDate + "-" + rep_name + ".csv"
df = pd.read_csv(rep_log)
df = df.drop(['From Name', 'From Number', 'To Name / Reference', 'To Number', 'Billing Code', 'Original Dialed Number',
'First Hunt Group', 'Last Hunt Group'], axis=1)
df['rep'] = rep_name
df.to_excel(writer, "raw_data"+rep, index=False)
return df
book = load_workbook('Ending 2016-07-30.xlsx')
writer = pd.ExcelWriter('Ending 2016-07-30.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
for rep in rep_list:
call_log_reader(rep)
writer.save()
答案 1 :(得分:0)
如果您使用openpyxl 2.4,则可以work with Pandas dataframes in directly in openpyxl。