Highlight the negative values red and positive values black in Pandas Dataframe

20 Aug, 2020
Let’s see various methods to Highlight the positive values red and negative values black in Pandas Dataframe.First, Let’s make a Dataframe:
Python3
# Import Required Librariesimport pandas as pdimport numpy as np    # Create a dictionary for the dataframedict = {  'Name': ['Sukritin', 'Sumit Tyagi',            'Akriti Goel', 'Sanskriti',           'Abhishek Jain'],   'Age': [22, 20, 45, 21, 22],  'Marks': [90, 84, -33, -87, 82]}  # Converting Dictionary to# Pandas Dataframedf = pd.DataFrame(dict)  # Print Dataframeprint(df)
Output: 
Now, come to the highlighting part. Our objective is to highlight negative values red and positive values black.
Method 1: Using Dataframe.style.apply().
Syntax: DataFrame.style.apply(self, func, axis=0, subset=None, **kwargs)Parameters: 
func: It should take a pandas.Series or pandas.DataFrame based on the axis and should return an object with the same shape. 
axis: {0 or ‘index’, 1 or ‘columns’, None}, default 0. Apply to each column (axis=0 or ‘index’), to each row (axis=1 or ‘columns’), or to the entire DataFrame at once with axis=None. 
subset: Set of columns or rows on which you want to call the func. 
**kwargs: Pass along to func.
Returns: Styler object.
Example 1: Highlighting text.
Python3
# Define a function for colouring # negative values red and # positive values blackdef highlight_max(s):    if s.dtype == np.object:        is_neg = [False for _ in range(s.shape[0])]    else:        is_neg = s < 0    return ['color: red;' if cell else 'color:black'             for cell in is_neg]  # Using apply method of style # attribute of Pandas DataFramedf.style.apply(highlight_max)
Output: 
 
Example 2: Highlighting cells instead of text.
Python3
# Define a function which # returns the list for # df.style.apply() methoddef highlight_max(s):    if s.dtype == np.object:        is_neg = [False for _ in range(s.shape[0])]    else:        is_neg = s < 0    return ['background: red; color:white'             if cell else 'background:black; color:white'             for cell in is_neg]  # Using apply method of style # attribute of Pandas DataFramedf.style.apply(highlight_max)
Output: 
 
Method 2: Using dataframe.style.applymap() method.
Syntax: DataFrame.style.applymap(self, func, subset=None, **kwargs)Parameters: 
func: It takes a scalar value and return the scalar values 
subset: Set of columns or rows on which you want to call the func. 
**kwargs: Pass along to func.
Returns: Styler object.
Example 1: Highlighting text.
Python3
# Define a function for # colouring negative values # red and positive values blackdef highlight_max(cell):    if type(cell) != str and cell < 0 :        return 'color: red'    else:        return 'color: black'  df.style.applymap(highlight_max)
Output: 
 
Example 2: Highlighting cells instead of text.
Python3
# Define a function which # returns string for # applymap() methoddef highlight_max(cell):    if type(cell) != str and cell < 0 :        return 'background: red; color:black'    else:        return 'background: black; color: white'  df.style.applymap(highlight_max)
Output: 
 Note: pandas.DataFrame.applymap() method passes only single cell into the callable function while the pandas.DataFrame.apply() passes the pandas.Series to the callable function.
Reference: Styling in Pandas 
Python pandas-dataFrame
Python Pandas-exercise
Python-pandas
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.