From 2d344402d3274ba6bc39dcea42e1e9404c07a971 Mon Sep 17 00:00:00 2001 From: Ta-nu-ki Date: Sat, 22 Aug 2020 21:28:19 +0300 Subject: [PATCH] Price decimals processing fix --- finam/export.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/finam/export.py b/finam/export.py index 23da9ac..29e1405 100644 --- a/finam/export.py +++ b/finam/export.py @@ -4,6 +4,7 @@ import operator from enum import IntEnum from io import StringIO +from decimal import Decimal try: from urllib import urlencode @@ -329,6 +330,10 @@ def __init__(self, export_host=None, fetcher=fetch_url): else: self._export_host = self.DEFAULT_EXPORT_HOST + @staticmethod + def _convert_decimals(value): + return float(Decimal(value)) + def _build_url(self, params): url = ('http://{}/table.csv?{}&{}' .format(self._export_host, @@ -393,14 +398,18 @@ def download(self, self._sanity_check(data) if timeframe == Timeframe.TICKS: date_cols = [2, 3] + decimal_cols = [""] else: date_cols = [0, 1] + decimal_cols = ["", "", "", ""] try: + decimals_converter_dict = {column: self._convert_decimals for column in decimal_cols} df = pd.read_csv(StringIO(data), index_col=0, parse_dates={'index': date_cols}, - sep=';') + sep=';', + converters=decimals_converter_dict) df.sort_index(inplace=True) except ParserError as e: raise FinamParsingError(e.message)