This is my script ...
from termcolor import colored
import pandas as pd
import numpy as np
data = {'Col1': [0, 15, 10, 5, 20, 17, 20], 'Col2': [11, 6, -3, 16, 21, 8, 26], 'STKS': [20, 30, 40, 50, 60, 70, 80], 'Col4': [3, 8, -13, -18, 3, 23, 42], 'Col5': [4, 19, 8, 11, 6, 20, 32]}
df = pd.DataFrame(data)
ATM = 50
def hightlight(series, excluded, spcl_col, spcl_val, extra_col= [] ):
def excl_formatter(series):
return [colored(str(x), 'white') for x in series]
def norm_formatter(series, extra=False):
tmp = series.sort_values()
if extra:
tmp.iloc[:-2] = tmp.iloc[:-2].map(lambda x: colored(x, *[('white' ,), ('green' ,),('light_red' ,),][np.sign(x)]))
else:
tmp.iloc[:-2] = tmp.iloc[:-2].map(lambda x: colored(str(x), 'white'))
tmp.iloc[-2] = colored(tmp.iloc[-2], None, 'on_magenta')
tmp.iloc[-1] = colored(tmp.iloc[-1], None, 'on_blue')
return tmp
def spcl_formatter(series):
return [colored(x, None, 'on_blue') if x == spcl_val else colored(x, None, 'on_red') for x in series]
if series.name == spcl_col:
return spcl_formatter(series)
if series.name in excluded:
return excl_formatter(series)
return norm_formatter(series, extra=series.name in extra_col)
col_to_exclude = ['STKS']
df_f1 = df.apply(hightlight, excluded=col_to_exclude, spcl_col='STKS',spcl_val=ATM, extra_col=['Col2', 'Col4']).rename(columns=lambda x: colored(x, 'white', None))
print(df_f1.to_string(index= False))
It was working well but after updating my python IDE it started to give future warning as ...
<string>:22: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value '['\x1b[97m0\x1b[0m' '\x1b[97m5\x1b[0m' '\x1b[97m10\x1b[0m'
'\x1b[97m15\x1b[0m' '\x1b[97m17\x1b[0m']' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.
<string>:19: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value '['\x1b[91m-3\x1b[0m' '\x1b[32m6\x1b[0m' '\x1b[32m8\x1b[0m'
'\x1b[32m11\x1b[0m' '\x1b[32m16\x1b[0m']' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.
<string>:19: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value '['\x1b[91m-18\x1b[0m' '\x1b[91m-13\x1b[0m' '\x1b[32m3\x1b[0m'
'\x1b[32m3\x1b[0m' '\x1b[32m8\x1b[0m']' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.
<string>:22: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value '['\x1b[97m4\x1b[0m' '\x1b[97m6\x1b[0m' '\x1b[97m8\x1b[0m'
'\x1b[97m11\x1b[0m' '\x1b[97m19\x1b[0m']' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.
I got a solution to hide this warning by following....
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
Is there any way to handle this dtype caused warning plz.
The issue is due to
tmpbeing of int64 dtype and trying to assign strings to it.Define
tmpas anobjectSeries innorm_formatter:Which will avoid the warning.