如果您还不知道如何在潜意识中将数据直接传输给客户,或者最糟糕的是,消息的文本太松弛,那么您将需要有关如何使表的解释过程更快,更舒适的信息。
例如,excel为此使用了条件格式和迷你图。在本文中,我们将看到如何使用Python和库来可视化数据pandas
:我们将使用DataFrame.style
and属性Options and settings
。
设置基本渲染
我们导入库:pandas
用于处理数据和seaborn
加载经典数据集penguins
:
import pandas as pd
import seaborn as sns
用于pd.set_option
配置输出,以便:
- 表中的行数不超过5;
- 无论单元格的长度如何,单元格中的文本都可以完全反映出来(如果单元格中有您要查看的长标题或URL,这将很方便);
- 所有数字均以两位小数表示;
pd.set_option('max_rows', 5)
pd.set_option('display.max_colwidth', None)
pd.set_option('display.float_format', '{:.2f}'.format)
让我们阅读并查看数据框。
penguins = sns.load_dataset(‘penguins’)
penguins
如果需要将设置恢复为默认值,请使用pd.reset_option
。例如,这样,如果我们想一次更新所有设置:
pd.reset_option('all')
属性的完整列表set_option
。
设置表格中的数据显示
数字格式,空格和大小写
数据框pandas
具有DataFrame.style
根据行或列的条件更改单元格内容显示的属性。
, , .
(penguins
.head(5)
.style
.format('{:.1f}', na_rep='-')
.format({'species': lambda x:x.lower(),
'island': lambda x:x.lower(),
'sex': lambda x: '-' if pd.isna(x) else x.lower()
})
)
, , ₽ :
(df
.style
.format({'price': '₽{:.2f}'})
)
— !
(, , )
, , , . subset
.
numeric_columns = ['bill_length_mm',
'bill_depth_mm',
'flipper_length_mm',
'body_mass_g']
, 5 .
(penguins
.head(5)
.style
.format('{:.1f}', na_rep='-')
.format({'species': lambda x:x.lower(),
'island': lambda x:x.lower(),
'sex': lambda x: '-' if pd.isna(x) else x.lower()
})
.highlight_null(null_color='lightgrey')
.highlight_max(color='yellowgreen', subset=numeric_columns)
.highlight_min(color='coral', subset=numeric_columns)
)
, 5 2 (!) .
: - Adelie.
Bar chart
, Adelie .
adelie_female = (penguins[(penguins['species'] == 'Adelie') &
(penguins['sex'] == 'FEMALE')]
.copy()
)
adelie_female['flipper_l_var'] = ((adelie_female['flipper_length_mm']-
adelie_female['flipper_length_mm'].mean()).round())
, 'flipper_l_var'
. :
set_properties
, 'flipper_l_var'
.
(adelie_female
.head(5)
.style
.format('{:.1f}', na_rep='-')
.format({'species': lambda x:x.lower(),
'island': lambda x:x.lower(),
'sex': lambda x: '-' if pd.isna(x) else x.lower()
})
.bar(subset=['flipper_l_var'],
align='mid',
color=['coral', 'yellowgreen'],
vmin=adelie_female['flipper_l_var'].min(),
vmax=adelie_female['flipper_l_var'].max()
)
.set_properties(**{'text-align': 'center'}, subset='flipper_l_var')
)
Heatmap
. , .
, .
species_stat=(penguins
.groupby('species')
.agg(penguins_count=('species','count'),
mean_bill_length=('bill_length_mm', 'mean'),
mean_bill_depth=('bill_depth_mm', 'mean'),
mean_flipper_length=('flipper_length_mm', 'mean'),
mean_body_mass=('body_mass_g', 'mean'),
)
)
, , - , .
. , ?! -, , .
(species_stat
.T
.style
.format("{:.1f}")
.background_gradient(cmap='Blues', axis=1)
)
— background_gradient
:
- (
cmap
):Blues
. ; - (
axis=1
).
pandas
使用DataFrame.style
和格式化表格Options and settings
可以简化工作,或者至少可以提高代码和报表的可读性。但是,当然要在可视化阶段之前故意进行数据类型,间隙和寄存器的处理。
此外,您可以处理:
- 出口精益求精;
- 条件格式的本机函数。我们使用内置的功能
highlight_max
,highlight_min
和highlight_null
,但对于更复杂的情况下,你可以写你自己的; - 这些库喜欢
sparklines
和PrettyPandas
。