不错吧,这5种方法可以轻松美化Pandas数据图表

大家好,我总是相信好的想法都是靠思想交流碰撞中获取的,最近一位微信群网友感慨:pandas做数据太单调了。结果另一位给出了这么漂亮的解决方案。我们一起来欣赏一下,文末可以加入我们的技术交流群。

我们知道 Pandas 是一种高效的数据处理库,它以dataframe和series为基本数据类型,呈现出类似excel的二维数据。

在Jupyter中,会美化Pandas的输出。不同于IDE展示的文本形式,Jupyter可以通过CSS修改表格的样式。

我们在做excel表格的时候,常常会对重要数据进行highlight,或者用不同颜色表示数据的大小。这在Pandas中也是可以实现的,而且非常简洁。图片

Pandas提供了DataFrame.style属性,它会返回Styler对象,用以数据样式的美化。图片

一般的,我们需要将样式函数作为参数传递到下面方法中,就可以实现图表美化。

  • Styler.applymap: 作用于元素

  • Styler.apply:作用于行、列或整个表

下面通过一些例子,具体展示常用的美化形式。

一、高亮显示

为便于展示,数据示例是用的2021世界人口数量前十国家数据

import pandas as pd
data = pd.read_excel(r"E:\\jupyter_notebook\\2021世界人口数据.xlsx")
data

图片

我们先看下该表的信息:

data.info()

图片

除了前两列,其他列都为数字类型。

现在对指定列的最大值进行高亮处理:

def highlight_max(s):
    '''
    对列最大值高亮(黄色)处理
    '''
    is_max = s == s.max()
    return ['background-color: yellow' if v else '' for v in is_max]

data.style.apply(highlight_max,subset=['2021人口', '2020人口', '面积','单位面积人口','人口增幅','世界占比'])

图片

如果不想对元素背景高亮处理,也可以直接更改指定元素颜色,从而达到突出重点的目的。

标记单位面积人口列大于200的元素:

def color_red(s):
    is_max = s > 200
    return ['color : red' if v else '' for v in is_max]

data.style.apply(color_red,subset=['单位面积人口'])

图片

二、数据条显示

Excel条件格式里,有一个数据条显示方式,用以可视化表达数据大小。

Pandas Style方法中也有数据条的表达形式,用df.style.bar来实现。

还是用前面人口数据的例子,我们来看下如何操作数据条。

import pandas as pd
data = pd.read_excel(r"E:\\jupyter_notebook\\2021世界人口数据.xlsx")
# 数据条显示指定列数据大小
data.style.bar(subset=['2021人口', '2020人口'], color='#FFA500')

图片

三、色阶显示

色阶也就是热力图,它和数据条一样,都用来表达数据大小。

Pandas Style中色阶的使用也很简单,用df.style.background_gradient实现。

import seaborn as sns

# 使用seaborn获取颜色
cm = sns.light_palette("green", as_cmap=True)
# 色阶实现
data.style.background_gradient(cmap=cm,subset=['2021人口', '2020人口', '面积','单位面积人口','人口增幅','世界占比'])

图片

可以通过选择最大最小颜色比例,调节色阶范围。

调节前:

import seaborn as sns

# 色阶实现,这里使用内置色阶类型,不调节颜色范围
data.style.background_gradient(cmap='viridis',high=0.2,low=0.1,subset=['2021人口', '2020人口', '面积','单位面积人口','人口增幅','世界占比'])

图片

调节后:

import seaborn as sns

# 色阶实现,这里使用内置色阶类型,调节颜色范围
data.style.background_gradient(cmap='viridis',high=0.5,low=0.3,subset=['2021人口', '2020人口', '面积','单位面积人口','人口增幅','世界占比'])

图片

四、百分比显示

有些数字需要百分比显示才能准确表达,比如说人口数据里的人口增幅、世界占比。

Pandas可以数据框中显示百分比,通过Styler.format来实现。

data.style.format("{:.2%}",subset=['人口增幅','世界占比'])

图片

五、标记缺失值

数据集中可能会存在缺失值,如果想突出显示缺失值,该怎么操作?

这里有好几种常用的方法,一是用-符号替代,二是高亮显示

先创建一个带缺失值的表,还是用人口数据。

import pandas as pd
import numpy as np
data = pd.read_excel(r"E:\\jupyter_notebook\\2021世界人口数据.xlsx")
data.iloc[1, 4] = np.nan
data.iloc[3, 1] = np.nan
data.iloc[6, 6] = np.nan
data

图片

上面数据中有三个缺失值,我们用-符号替代缺失值:

data.style.format(None, na_rep="-")

图片

再试试对缺失值高亮显示:

data.style.highlight_null(null_color='red')

图片

附:将样式输出到excel

Pandas中的数据美化样式不仅可以展示在notebook中,还可以输出到excel。

这里使用to_excel方法,并用openpyxl作为内核

import pandas as pd
import numpy as np
data = pd.read_excel(r"E:\\jupyter_notebook\\2021世界人口数据.xlsx")
data.style.background_gradient(cmap='viridis',subset=['2021人口', '2020人口', '面积','单位面积人口','人口增幅','世界占比']).\
                              to_excel('style.xlsx', engine='openpyxl')

图片

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

目前开通了技术交流群,群友已超过1000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
  • 方式②、添加微信号:dkl88191,备注:CSDN+研究方向
  • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: DataFrame数据可视化是通过使用PyQt来实现的。PyQt是一个基于Python的跨平台图形用户界面工具,它结合了Qt的功能和Python语言的灵活性,可以用来创建丰富的GUI应用程序。 首先,我们需要导入pandas和PyQt,在pandas中创建一个DataFrame对象。DataFrame是一个二维的数据结构,类似于电子表格或SQL中的表格,可以存储不同类型的数据。 接下来,我们可以使用PyQt的各控件来显示数据。例如,可以使用QTableWidget控件来显示DataFrame的内容。可以使用setRowCount()和setColumnCount()方法来设置表格的行数和列数,然后使用setItem()方法来设置每个单元格的值。 此外,还可以使用QChart控件来创建各图表,如折线图、柱状图、散点图等。可以使用QChartView来显示图表,将其作为窗口的一个部件。 还可以通过PyQt的信号和槽机制实现交互功能。例如,可以在表格中选择一行或一列,然后显示对应的图表。 最后,可以使用PyQt的布局管理器来控制界面的布局。可以使用水平布局或垂直布局将控件放置在窗口中的适当位置。 总之,使用PyQt可以方便地对DataFrame数据进行可视化,通过表格图表等控件展示数据,同时还可以实现交互功能,提供更好的用户体验。 ### 回答2: Dataframe是pandas中的一个重要数据结构,用于处理和分析数据。而PyQt则是一个Python的图形用户界面工具包,可以用于创建交互式的应用程序。 要在PyQt中可视化Dataframe数据,可以使用matplotlib来绘制图表,并将图表嵌入到PyQt的窗口中。下面是一个示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure import pandas as pd # 创建一个继承自QMainWindow的主窗口类 class MainWindow(QMainWindow): def __init__(self): super().__init__() # 读取Dataframe数据 data = {'Name': ['Tom', 'Nick', 'John', 'David'], 'Age': [28, 32, 25, 35], 'City': ['Beijing', 'New York', 'London', 'Tokyo']} df = pd.DataFrame(data) # 创建一个绘图窗口 fig = Figure() canvas = FigureCanvas(fig) # 添加一个绘图子区域 ax = fig.add_subplot() ax.bar(df['Name'], df['Age']) # 将绘图窗口添加到窗口布局中 layout = QVBoxLayout() layout.addWidget(canvas) # 创建一个QWidget作为主窗口的中心部件,将布局添加到中心部件中 central_widget = QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget) # 创建应用程序并运行 if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 以上代码创建了一个简单的PyQt应用程序窗口,并在窗口中使用matplotlib绘制了Dataframe中人名和年龄的柱状图。可以根据实际需要对绘图进行进一步的美化和自定义。希望对你有所帮助! ### 回答3: 在使用PyQt进行DataFrame数据可视化时,我们可以使用一些图表和工具来实现。 首先,我们需要将DataFrame数据转化为适合可视化的形式。在Python中,有一些可以帮助我们进行这个转换,如`pandas`、`numpy`等。我们可以使用这些来对数据进行处理和转换,以便进行后续的可视化操作。 接下来,我们可以使用PyQt中的一些内建模块,如`QtCharts`或`QChartView`,来创建图表图表视图。这些模块提供了一些常见的图表类型,如折线图、柱状图、饼图等,可以根据需求进行选择。 在创建图表图表视图后,我们可以使用`Series`或`DataFrame`的方法来设置图表数据源。通过这些方法,我们可以将转换后的DataFrame数据传递给图表对象,以便在图表上显示。 当数据传递给图表对象后,我们可以设置一些样式和属性,如标题、轴标签、图例等,以美化图表的外观。PyQt提供了一些方法和属性,让我们可以轻松地进行这些设置。 最后,我们可以将图表视图对象添加到PyQt的窗口组件中,以便在GUI界面中展示。我们可以使用`QVBoxLayout`或`QHBoxLayout`等布局管理器,来控制图表视图的位置和大小。 总而言之,使用PyQt进行DataFrame数据的可视化可以帮助我们更好地理解和分析数据。通过选择适合的图表类型、设置数据源和属性,以及将图表添加到GUI界面中,我们可以方便地呈现数据并进行交互式操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值