From 1f74e6911e3c083de1897d592426360543d1dad0 Mon Sep 17 00:00:00 2001 From: Ralph Vogl Date: Mon, 3 Oct 2022 17:21:18 +0200 Subject: [PATCH 1/3] m/0018 - a copy should not be modified from original --- stockstats.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/stockstats.py b/stockstats.py index 3c66b8e..86e6fec 100644 --- a/stockstats.py +++ b/stockstats.py @@ -31,18 +31,19 @@ import numpy as np import pandas as pd +import copy __author__ = 'Cedric Zhuang' -def wrap(df, index_column=None): +def wrap(df, index_column=None, lowerCase=True): """ wraps a pandas DataFrame to StockDataFrame :param df: pandas DataFrame :param index_column: the name of the index column, default to ``date`` :return: an object of StockDataFrame """ - return StockDataFrame.retype(df, index_column) + return StockDataFrame.retype(df, index_column, lowerCase) def unwrap(sdf): @@ -1270,7 +1271,7 @@ def within(self, start_date, end_date): return self.start_from(start_date).till(end_date) def copy(self, deep=True): - return wrap(super(StockDataFrame, self).copy(deep)) + return wrap(super(StockDataFrame, self).copy(deep), lowerCase=False) def _ensure_type(self, obj): """ override the method in pandas, omit the check @@ -1280,7 +1281,7 @@ def _ensure_type(self, obj): return obj @staticmethod - def retype(value, index_column=None): + def retype(value, index_column=None, lowerCase=True): """ if the input is a `DataFrame`, convert it to this class. :param index_column: name of the index column, default to `date` @@ -1290,11 +1291,13 @@ def retype(value, index_column=None): if index_column is None: index_column = 'date' + print(type(value)) if isinstance(value, StockDataFrame): return value elif isinstance(value, pd.DataFrame): - # use all lower case for column name - value.columns = map(lambda c: c.lower(), value.columns) + if lowerCase: + # use all lower case for column name + value.columns = map(lambda c: c.lower(), value.columns) if index_column in value.columns: value.set_index(index_column, inplace=True) From 2ef92654162972a1516aae43e073fcf1fe813f2c Mon Sep 17 00:00:00 2001 From: Ralph Vogl Date: Mon, 3 Oct 2022 17:23:15 +0200 Subject: [PATCH 2/3] m/0018 - a copy should not be modified from original --- stockstats.py | 1 - 1 file changed, 1 deletion(-) diff --git a/stockstats.py b/stockstats.py index 86e6fec..c4445eb 100644 --- a/stockstats.py +++ b/stockstats.py @@ -1291,7 +1291,6 @@ def retype(value, index_column=None, lowerCase=True): if index_column is None: index_column = 'date' - print(type(value)) if isinstance(value, StockDataFrame): return value elif isinstance(value, pd.DataFrame): From 458fd59aaadd6b562482520c29db1c81aa73f83c Mon Sep 17 00:00:00 2001 From: Ralph Vogl Date: Mon, 3 Oct 2022 19:36:18 +0200 Subject: [PATCH 3/3] m/0019 - added lowerCase flag also in wrap calls in _getItem --- stockstats.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/stockstats.py b/stockstats.py index c4445eb..33b3aa7 100644 --- a/stockstats.py +++ b/stockstats.py @@ -45,12 +45,10 @@ def wrap(df, index_column=None, lowerCase=True): """ return StockDataFrame.retype(df, index_column, lowerCase) - def unwrap(sdf): """ convert a StockDataFrame back to a pandas DataFrame """ return pd.DataFrame(sdf) - class StockDataFrame(pd.DataFrame): # Start of options. KDJ_PARAM = (2.0 / 3.0, 1.0 / 3.0) @@ -1248,7 +1246,7 @@ def __init_column(self, key): def __getitem__(self, item): try: - result = wrap(super(StockDataFrame, self).__getitem__(item)) + result = wrap(super(StockDataFrame, self).__getitem__(item), lowerCase=False) except KeyError: try: if isinstance(item, list): @@ -1258,7 +1256,7 @@ def __getitem__(self, item): self.__init_column(item) except AttributeError: pass - result = wrap(super(StockDataFrame, self).__getitem__(item)) + result = wrap(super(StockDataFrame, self).__getitem__(item), lowerCase=False) return result def till(self, end_date):