Pandas 在Dataframe中将负值标记为红色,正值标记为黑色
分析数据是任何数据科学或分析任务的基本方面,数据探索过程中常见的要求之一是迅速识别Pandas dataframe中的负值和正值,以便有效地解释。
在本文中,我们将使用Python中的Pandas库探索一种强大的技术,可以在DataFrame内部使用红色标记负值并使用黑色标记正值。通过使用这种方法,数据分析师和研究人员可以有效区分正负趋势,帮助深入解释数据和决策。
如何在Pandas Dataframe中将负值标记为红色,正值标记为黑色
有几种方法可以在Pandas DataFrame中将负值标记为红色,正值标记为黑色。以下是三种常用的技术
方法1:使用Styler和Styler.applymap()
Pandas中的Styler类允许我们对DataFrame元素应用格式。我们可以定义一个格式化函数,检查每个值的符号,并返回相应的CSS样式。然后,我们可以使用Styler.applymap()方法将此函数应用于DataFrame的每个元素。
方法2:使用Styler和Styler.background_gradient()
Styler.background_gradient()方法根据值为DataFrame应用渐变颜色映射。我们可以指定颜色范围,例如从红色到黑色,并将中点设置为零。此方法将自动分配颜色,负值显示为红色,正值显示为黑色。
方法3:使用numpy.where()
我们可以使用numpy.where()函数创建一个新的DataFrame,其中值根据其符号替换为颜色代码。我们可以将红色赋给负值,将黑色赋给正值。然后,我们可以显示带有所需颜色格式的DataFrame。
我们将使用一个程序示例来了解这些方法,但首先,让我们看一下我们将遵循的步骤。
- 导入必要的库−
- Pandas被导入以用于处理数据框。
-
numpy被导入以处理数值计算。
-
定义格式化函数−
- highlight_values 函数以一个值作为输入,并返回用于格式化的CSS样式属性。它检查值是否小于零,如果是则返回’color: red’,否则返回’color: black’。
-
gradient_color 函数以一个数据系列作为输入,并使用系列的绝对值来计算最大值(norm)。然后为系列中的每个元素返回一个CSS背景颜色样式列表,对于负值分配’red’,对于正值分配’black’。
-
where_color 函数使用 numpy.where() 来创建一个新的DataFrame,其中值根据其符号被替换为颜色代码。它为负值赋予’color: red’,为正值赋予’color: black’。
- 创建一个样本DataFrame –
- 该程序使用一些数值创建了一个样本DataFrame df。
- 应用格式化方法 –
-
方法1:使用Styler和Styler.applymap() -
-
使用 df.style 对DataFrame df进行样式设置。
-
将 applymap() 方法应用于样式化的DataFrame,并且 highlight_values 参数设置为函数 where_color 。
function作为参数传递。
- 结果样式化的DataFrame保存为名为highlighted_values_method1.xlsx的Excel文件。
- 方法2:使用Styler和Styler.background_gradient() –
- DataFrame df使用df.style进行样式化。
-
apply()方法应用于样式化的DataFrame,并将gradient_color函数作为参数传递。
-
结果样式化的DataFrame保存为名为highlighted_values_method2.xlsx的Excel文件。
- 方法3:使用numpy.where() –
- DataFrame df 是使用 df.style 进行样式化的。
-
应用 apply() 方法到样式化的 DataFrame,将 where_color 函数作为参数传入。
-
将生成的样式化 DataFrame 保存为名为 highlighted_values_method3.xlsx 的 Excel 文件。
示例
import pandas as pd
import numpy as np
# Method 1: Using Styler and Styler.applymap()
def highlight_values(x):
if x < 0:
return 'color: red'
else:
return 'color: black'
# Method 2: Using Styler and Styler.background_gradient()
def gradient_color(data):
norm = abs(data.values).max()
return ['background-color: {0}'.format('red' if x < 0 else 'black') for x in data]
# Method 3: Using numpy.where()
def where_color(df):
return np.where(df < 0, 'color: red', 'color: black')
# Create a sample DataFrame
data = {'A': [-2, 4, -1, 5, 0],
'B': [3, -6, 2, 7, -4],
'C': [-3, -2, 1, 6, -5]}
df = pd.DataFrame(data)
# Method 1: Using Styler and Styler.applymap()
styled_df = df.style.applymap(highlight_values)
styled_df.to_excel('highlighted_values_method1.xlsx', engine='openpyxl', index=False)
# Method 2: Using Styler and Styler.background_gradient()
styled_df = df.style.apply(gradient_color)
styled_df.to_excel('highlighted_values_method2.xlsx', engine='openpyxl', index=False)
# Method 3: Using numpy.where()
styled_df = df.style.apply(where_color)
styled_df.to_excel('highlighted_values_method3.xlsx', engine='openpyxl', index=False)
输出
highlighted_values_method1.xlsx −
A B C
-2 3 -3
4 -6 -2
-1 2 1
5 7 6
0 -4 -5
‘highlighted_values_method2.xlsx –
highlighted_values_method3.xlsx –
A B C
-2 3 -3
4 -6 -2
-1 2 1
5 7 6
0 -4 -5
结论
总之,通过使用Pandas中的各种技术,例如Styler类和numpy.where(),我们可以轻松地将DataFrame中的负值以红色标亮,并将正值以黑色标亮。这些方法提供了有效的方式来对数据进行可视化解释,并识别趋势或异常情况。