[python] pandas to excel bez přepsání původních hodnot

Lumír Balhar frenzy.madness na gmail.com
Sobota Květen 25 10:35:06 CEST 2019


Dne pondělí 20. května 2019 19:00:18 UTC+2 radek... na gmail.com napsal(a):
> Dobrý den,
> mám tady další velice (určitě pro vás) jednoduchý problém, s kterým se nedokážu poprat.
> 
> Mám napsaný skript, který mi každý den vypíše data a exportuje do .xlsx souboru, kde filtruji do dvou sheets (BOT, SLD).
> 
> Potřeboval bych, aby se další den hodnoty doplnily na nový řádek opět podle filtru (BOT, SLD). Takhle se tabulka pokaždé přepíše.
> 
> ****************************************************************************
> # získání informace o vyplněných příkazech
> 
> exekuce = (e for e in ib.fills() if e.contract.secType == "STK")
> exekuce = [(e.contract.symbol,e.time,e.execution.side,e.execution.shares,e.execution.avgPrice,e.execution.orderRef) 
>            for e in exekuce]
> exe=pd.DataFrame(exekuce, columns=['symbol', 'cas','smer','akcii','cena','ref'])
> #exe['cas'] = pd.to_datetime(exe['cas'], format="%m/%d/%Y")
> exe.set_index("symbol",inplace=True)
> print(exe)
> 
> # DataFrame si pro kontrolu vypíšeme
> exe
> 
> # Uložíme do excelu, zvlášť nákup a zvlášť prodej
> exe_bot = exe[exe['smer']=='BOT']
> exe_sld = exe[exe['smer']=='SLD']
> 
> with pd.ExcelWriter('exekuce.xlsx') as writer:
>     exe_bot.to_excel(writer, sheet_name='Nákup')
>     exe_sld.to_excel(writer, sheet_name='Prodej')
> 
> ****************************************************************************
> 
> Děkuji za případnou pomoc. Předem upozorňuji, že jsem naprostý začátečník, tak snad je to srozumitelné.

Ahoj.

Nemám teď moc času, tak zkusím jen nastřelit možné řešení. Kdyby bylopotřeba více detailu, napiš a já doplním i s příklady.

Řešením problému je to, že místo vytváření nového pd.DataFrame si načteš ten původní z .xlsx souboru, doplníš jej o nové řádky a pak jej stejně jako doposud uložíš zpět do .xlsx souboru.

1. Načteš existující .xlsx soubor do dvou DataFramů (pro každý list jeden) - na to je funkce read_excel https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas-read-excel
2. Ve svém programu si klidně stejně jako doposud vytvoříš dva nové DataFrame exe_bot, exe_std
3. Tyto nové hodnoty přidáš pomocí metody .append do DataFramů, které sis načetl  v bodě 1 ze souboru https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html
4. Uložíš DataFrame obsahující spojené nové a staré hodnoty zpět do .xlsx souboru jako doposud.

Jiné je v tom pro jednoduchost jen to, že si načtěš ze souboru staré hodnoty a před uložením je spojíš s novými hodnotami.

Snad to alespoň trošku pomůže. Kdyby ne, dodám více detailů i s příklady.

Lumír


Další informace o konferenci Python