Source code for dstream_excel.dstream.keepopen.extract
from typing import Sequence
import time
import pandas as pd
from xlwings.main import Sheet
from pythoncom import com_error
from dstream_excel.dstream.workbook.exceptions import DatastreamDataErrorException
[docs]def firm_dfs_from_multi_firm_df(multi_firm_df: pd.DataFrame, symbols: Sequence[str], num_variables: int):
dfs = []
for i, symbol in enumerate(symbols):
bottom_column_index = i * num_variables
top_column_index = (i + 1) * num_variables
firm_df = multi_firm_df.iloc[:, bottom_column_index:top_column_index]
firm_df['Symbol'] = symbol
dfs.append(firm_df)
return dfs
[docs]def long_firm_df_from_ds_multi_firm_df(multi_firm_df: pd.DataFrame, symbols: Sequence[str], num_variables: int):
firm_dfs = firm_dfs_from_multi_firm_df(multi_firm_df, symbols, num_variables)
return pd.concat(firm_dfs)
[docs]def get_multi_firm_df_from_sheet(ws: Sheet, table_start_range: str = 'A1', retries: int = 3):
while retries > 0:
try:
df = ws.range(table_start_range).options(pd.DataFrame, expand='table').value
except com_error:
time.sleep(1)
retries -= 1
if retries <= 0:
raise DatastreamDataErrorException('could not populate datastream values.')
continue
break
df.index.name = 'Date'
return df