I would like to declare my dataframe as constant, so no matter what operations are happening in a modeule it's values or column names do not change. I know that it is possible to define constant variables using slot =() like so,
class CONST(object):
__slots__ = ()
my_constant = 123
CONST = CONST()
CONST.my_constant = 345 # AttributeError: 'CONST' object attribute 'my_constant' is read-only
however when i try the same thing on pandas dataframe, it is not constant anymore.
import pandas as pd
df1 = pd.DataFrame({'text': ['the weather is good']})
class CONST(object):
__slots__ = ()
my_constant = pd.DataFrame({'text': ['the weather is good']})
CONST = CONST()
CONST.my_constant.columns =['message']
I receive no error this time saying that it is read_only. I also looked at this response here but got the same output that shows my pandas dataframe is not read-only.
CodePudding user response:
Your first solution is applicable only for immutable data, consider following example
class CONST(object):
__slots__ = ()
my_constant = {"x":1,"y":2,"z":3}
CONST = CONST()
CONST.my_constant.clear()
print(CONST.my_constant)
output
{}
so in order to get it working you would need immutable (frozen) version of DataFrame, see pandas Immutable DataFrame for possible solutions.