关于人工智能:使用Pandas-DataFrame输出报告

作者|Christopher Tao
编译|VK
起源|Towards Datas Science

作为一个应用Python作为次要编程语言的数据科学家或分析师,我置信你肯定常常应用Pandas。在Jupyter Notebook上输入pandas DataFrame是十分频繁的。

然而,你有没有想过,咱们能够让DataFrame自身可视化?换句话说,对于一些简略的可视化目标,咱们不须要Matplotlib或其余可视化库。

Pandas DataFrame输入能够像Excel电子表格一样可视化,并且反对简单款式,代码非常简单。

在这篇文章中,我将介绍Pandas库中的款式包,与它的数据处理办法相比,晓得它的人绝对较少。此外,还有一些乏味的库,它们反对Pandas DataFrame的更多在线可视化。在最初一节中,我还将介绍其中的一个Sparklines。

对于Pandas库

家喻户晓,Pandas DataFrame能够输入到iPython/Jupyter Notebook中,该 Notebook主动以HTML格局出现CSS款式。这相对是一个惊人的性能,因为即便咱们只是简略地打印它,演示文稿也十分丑陋。

它应用“HTML+CSS”。Pandas还容许咱们定制CSS款式,使它看起来更丑陋。这是通过“style”API实现的。

https://pandas.pydata.org/doc…

咱们能够间接调用df.style获取 DataFrame的Styler对象,而后增加所需的款式。当初,让咱们看看咱们能做些什么。

格式化输入

当然,咱们总是能够格式化数据自身,比df.round(2))将所有数值四舍五入到2位小数。然而,应用Pandas style也有一些益处。例如,咱们实际上不更改值,而只更改示意模式,这样就不会失落精度。

让咱们先创立一个随机DataFrame。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randn(10, 2)*100)

而后,让咱们以特定格局输入 DataFrame。

df.style.format("{:.2f}")

顺便说一句,如果你不太熟悉Python格式化语言,例如表达式{:.2f},那么你能够在这里查看官网文档):https://docs.python.org/3/lib…

用背景和文本色彩突出显示单元格

我晓得,格式化还不够酷。有了CSS,咱们能够轻松地做很多事件,比方扭转背景色彩和文本色彩。

例如,对于下面显示的同一个 DataFrame,咱们心愿别离突出显示负数和自然数。如果你对CSS有一些根本的理解,或者只是简略的Google一下,你就会晓得上面的属性来设置HTML表格单元格的背景色彩和文本色彩。

background-color: red; color: white

让咱们编写一个函数来给表格单元格着色。

def highlight_number(row):
    return [
        'background-color: red; color: white' if cell <= 0 
        else 'background-color: green; color: white'
        for cell in row
    ]

如果单元格的值为正数,咱们应用红色作为背景,否则如果是正值,则应用绿色。因为色彩可能有点暗,咱们还想将文本色彩改为红色。

而后,咱们能够将函数利用于 DataFrame。

df.style.apply(highlight_number)

超级酷!当初很显著,咱们失去了正数和负数,它们很好地区离开来。

链接款式函数

到目前为止,咱们每次只增加一种款式。事实上,咱们调用df.style,返回 DataFrame的Styler对象。Styler对象反对链接款式函数。让咱们看看另一个更简单的例子。

比方说,咱们想在原始数据框中增加以下款式。

  1. 用红色突出显示正数,用绿色突出显示负数。
  2. 格式化数字。
  3. 应用set_caption()向表增加题目。
  4. 使表格间隙变大,这样看起来就不会那么挤了。
  5. 在单元格之间增加红色边框以改善显示成果。

是的,咱们能够通过应用链表达式一次性实现所有这些操作。

df.style \
  .apply(highlight_number) \
  .format('${0:,.2f}') \
  .set_caption('A Sample Table') \
  .set_properties(padding="20px", border='2px solid white')

感觉该表能够间接用于某些业务报表

内置突出显示性能

不懂CSS,但还是想夸耀一下?是的,Pandas格调还提供了一些内置的函数,这些函数很酷,但很容易应用。

突出显示函数

让咱们应用雷同的 DataFrame进行演示。

# 为演示目标生成一个nan值
df.at[1, 1] = None

# 增加款式
df.style \
  .highlight_null('lightgray') \
  .highlight_max(color='lightgreen') \
  .highlight_min(color='pink')

看,用你喜爱的色彩来突出显示空值、最小值和最大值是很容易的。我倡议应用浅色,因为文本色彩总是彩色的。

渐变色背景

Pandas格调还反对应用cmap为表格背景着色。当咱们想将数值数据可视化时,这是十分有用的。

df = pd.DataFrame(np.random.randn(10, 2))
df.style \
  .background_gradient(cmap='Blues')

所以,背景色是渐变色的取决于数值。请留神,“蓝调”是Pandas反对的cmap之一。如果你想晓得其余反对什么,那么上面的Matplotlib文档页是一个很好的参考。

https://matplotlib.org/3.1.0/…

折线条形图

这是另一个内置的超级酷的函数。它能够在每个单元格的背景中生成条形图,以批示它们的值。让咱们应用下面的 DataFrame。

df.style.bar()

当然,咱们对条形图的默认款式并不称心。让咱们改良一下演示。

df.style \
  .format('{:.2f}') \
  .bar(align='mid', color=['#FCC0CB', '#90EE90']) \
  .set_caption('A Sample Table with Bar Chart') \
  .set_properties(padding="15px", border='2px solid white', width='300px')

你能置信这依然是你相熟的“Pandas DataFrame”吗?

让我简略地解释一下bar()办法中的参数。color参数反对单个字符串或元组,当它是元组时,第一种色彩将用于为负值着色,第二种色彩用于为正值着色。因为咱们应用两种色彩,所以咱们须要将条形图设置为在单元格两头对齐。

Sparklines-一个直线柱状图

我能够到此为止,但我想展现我发现的另一个十分乏味的库,叫做Sparklines。

你能够应用pip装置库。

pip install sparklines

而后,让咱们导入这个库并创立另一个示例 DataFrame以供演示。

from sparklines import sparklines

df = pd.DataFrame({
    'a': np.random.normal(0, 1, 100),
    'b': np.random.normal(1, 1, 100),
    'c': np.random.normal(0, 3, 100)
})

Sparklines的性能很简略。它能够应用Unicode字符串生成条形图,例如▁、▂、▃。为了确保条形图的程序正确,并使其成为一个柱状图,咱们须要先应用NumPy来筹备值来生成直方图值。

def sparkline_dist(data):
    hist = np.histogram(data, bins=10)[0]
    dist_strings = ''.join(sparklines(hist))
    return dist_strings

对于每一列,咱们能够应用迷你图生成直方图。

[sparkline_dist(df[col]) for col in df.columns]

最初,咱们能够将字符串与其余统计数据放在一起,以生成更好的报告。

df_stats = df.agg(['mean', 'std']).transpose()
df_stats['histogram'] = sl_list
df_stats.style \
  .format('{:.2f}', subset=['mean', 'std']) \
  .set_caption('A Sample Table with Sparklines Distributions') \
  .set_properties(padding="15px", border='2px solid white')

总结

在本文中,我向你演示了Pandas款式包中的所有次要办法。咱们能够设置值的格局,给背景着色,用定制的CSS属性来改良演示。

原文链接:https://towardsdatascience.co…

欢送关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理