2016-11-27 2 views
2

Я читаю несколько CSV (через URL) в несколько Pandas DataFrames и хочу сохранить результаты каждого CSV в отдельные таблицы Excel (вкладки). Когда я сохраняю writer.save() внутри цикла for, я получаю только последний результат на одном листе. И когда я перемещаю writer.save() вне цикла for, я получаю только первый результат на одном листе. Оба ошибаются.Прочтите из CSV и сохраните на вкладках Excel

import requests 
import pandas as pd 
from pandas import ExcelWriter 

work_statements = { 
'sheet1': 'URL1', 
'sheet2': 'URL2', 
'sheet3': 'URL3' 
} 

for sheet, statement in work_statements.items(): 
    writer = pd.ExcelWriter('B.xlsx', engine='xlsxwriter') 
    r = requests.get(statement) # go to URL 
    df = pd.read_csv(statement) # read from URL 
    df.to_excel(writer, sheet_name= sheet) 
writer.save() 

Как я могу получить все три результата в трех отдельных листах?

ответ

2

Вы повторно инициализируете объект writer с каждым циклом. Просто инициализируйте его один раз до for и сохраните документ один раз после цикла. Кроме того, в read_csv() линии, вы должны читать в содержании запроса, а не URL (т.е. statement) сохраняются в словаре:

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

for sheet, statement in work_statements.items(): 
    r = requests.get(statement)     # go to URL 
    df = pd.read_csv(r.content)     # read from URL 
    df.to_excel(writer, sheet_name= sheet) 
writer.save() 
+0

Это сработало! спасибо – user3062459

Смежные вопросы