找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2426

积分

0

好友

340

主题
发表于 前天 00:40 | 查看: 7| 回复: 0

昨晚十一点多我还在公司,运营同事扔给我一个Excel,说“你帮我看下这个数据啥问题,我这边筛半天筛不出来”。我那会儿正好在终端里 print(df.head()) 看日志,黑底白字一坨数字,人家看了两眼默默关上了我电脑屏幕:你这谁看得懂啊…

那一刻我突然有点羞愧——都这个年代了,我还在拿 Pandas 当“高配版CSV阅读器”,对非技术同事一点不友好。后来这几个月我基本把“看表”这件事,全换成了各种交互式表格,体验提升巨大。

今天就跟你聊聊:什么时候该把 Pandas 的静态输出,换成交互式表格库?怎么换?用什么?

你回想一下,平时我们看数据,八成是这么干的:

import pandas as pd

df = pd.read_csv(“orders.csv”)
print(df.head())
print(df.describe())

对程序员自己还好,肉眼扫扫就过去了。但一到需要协作或探索的场景就比较要命:

  • 业务要自己筛一下下单时间在某个区间的订单
  • 产品想点一下列头,按照金额排序看看异常值
  • 运营想手动改两条脏数据再导出去

Pandas 的 DataFrame 在终端里就那样,不能点列头排序,不能点一下就过滤,改个值还得写代码重新跑一遍

于是你就会看到这种对话:

运营:你帮我筛一下金额大于 1000 的,发我
你:好,我写个脚本……
运营:诶我刚刚又想起来要加个条件……

来来回回,半小时就没了。

那有没有办法:既保留 pandas 做数据处理的爽感,又给自己和业务一个“像 Excel 一样能点点点的表格界面”? 有的,下面就说三个我自己常用的套路,全是 Python 生态里的工具。

第一招:Pandas 还在,给它配个“可视化外壳”——PandasGUI

这个是我最先用上的。我懒得写前端,就给需要看数据的同事装了个 pandasgui,两行代码就把 DataFrame 扔进一个桌面窗口里,筛选排序、编辑、导出全都有。

安装:

pip install pandasgui

用法真的是没啥学习成本:

import pandas as pd
from pandasgui import show

df = pd.read_csv(“orders.csv”)

gui = show(df, settings={‘block’: True})

跑完之后会弹出一个窗口,大概能干这些事:

  • 点列头排序
  • 顶部有过滤条件,随便加
  • 双击单元格就能改值
  • 右上角可以直接导出 CSV / Excel

你要是一个人玩数据分析,这玩意儿就跟“pandas 版 Excel”一样,很顺手。

适合啥场景?

  • 本地脚本跑完想“肉眼再检查一下数据”的时候
  • 不想开 Jupyter,只想临时看一眼结果表
  • 给同组懂一点电脑但不懂代码的同事用

不太适合的,是那种要在服务器上跑的东西,毕竟它是桌面窗口。

第二招:Dtale——让 DataFrame 直接长成一个小网站

有一次我们排查线上 bug,日志导出来丢给大家看。结果又是熟悉的一幕:大家看不懂那一坨内容。后来我干脆在测试机上跑了个 dtale,一行命令让大家自己开浏览器去点。体验极像一个内网 BI 工具,不过底层还是 pandas。

安装也简单:

pip install dtale

简单用一下:

import pandas as pd
import dtale

df = pd.read_csv(“orders.csv”)

# 启动一个本地 web 服务
d = dtale.show(df, ignore_duplicate=True)
d.open_browser()

这时候浏览器里会打开一个页面,表格支持:

  • 点列头排序、多条件过滤
  • 勾选行、看详情
  • 现场写一点简单的表达式,比如新增列 df[‘amount_tax’] = df[‘amount’] * 1.13
  • 直接导出子集

更爽的是,它和 pandas 是打通的,你在页面里做的一些操作,可以生成对应的 pandas 代码片段,相当于帮你“录制”了操作脚本。

我一般这么用:
有一段时间我写了个定时任务,每天凌晨从数据库拉数据,做一些清洗,然后在测试服务器上跑这一段:

import dtale
from my_pipeline import load_cleaned_df

df = load_cleaned_df()

d = dtale.show(df, host=‘0.0.0.0’, port=40000)
print(“页面地址:http://your-test-host:40000”)

然后白天运营要看数据,我就把这个地址扔给他们。人家打开浏览器就能玩表格,你也不用给每个人装 Python 环境。

注意两个小坑:

  1. 服务器要开放端口,不然外部访问不到
  2. 数据量特别大(百万级)的时候,前端会有点吃力,就别太暴力了,用采样或者分页

第三招:Streamlit + AgGrid,做一个“可编辑的 Web 报表”

上面两个偏“工具人自用”。要是你想做一个稍微正规点的 Web 页面,给整个团队用,还能把交互写得灵活一些,那我现在最常用的是这套:streamlit + streamlit-aggrid

Streamlit 是一个写数据应用特别快的框架,AgGrid 是一个基于 AG Grid 的交互表格,支持编辑、勾选、冻结列那些。

先装包:

pip install streamlit streamlit-aggrid pandas

然后写一个最小 demo,比如 app.py

import pandas as pd
import streamlit as st
from st_aggrid import AgGrid, GridOptionsBuilder, GridUpdateMode

st.set_page_config(page_title=“订单数据小工具”, layout=“wide”)

st.title(“订单数据交互表格”)

@st.cache_data
def load_data():
    return pd.read_csv(“orders.csv”)

df = load_data()

st.subheader(“原始数据(可以筛选,可以改)”)

# 构建 AgGrid 配置
gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_pagination(enabled=True, paginationAutoPageSize=False, paginationPageSize=20)
gb.configure_default_column(editable=True, filter=True, sortable=True, resizable=True)
gb.configure_selection(“multiple”, use_checkbox=True)

grid_options = gb.build()

grid_response = AgGrid(
    df,
    gridOptions=grid_options,
    update_mode=GridUpdateMode.VALUE_CHANGED | GridUpdateMode.SELECTION_CHANGED,
    enable_enterprise_modules=False,
    fit_columns_on_grid_load=True
)

# 取出用户编辑后的数据
edited_df = grid_response[“data”]
selected_rows = grid_response[“selected_rows”]

st.subheader(“你刚刚改过 / 选中的数据”)
st.dataframe(pd.DataFrame(selected_rows))

# 比如点个按钮,把 edited_df 写回数据库
if st.button(“保存到数据库(示例)”):
    # save_to_db(edited_df)  # 伪代码
    st.success(“已模拟保存,其实啥也没干 😄”)

运行:

streamlit run app.py

浏览器打开之后,这个表格就“活”了:

  • 任何一列都能过滤/排序
  • 某些列可以设为可编辑(比如备注、标签)
  • 你在表格里改完,edited_df 就是最新的数据,可以写回去

这套方案特别适合:

  • 做给运营/客服用的“轻量后台”
  • 做一个数据排查小工具,大家自己筛选、勾选,再点“批量处理”
  • 快速验证一个想法:批量修改、打标签、调参

说句实话,很多简单的内部工具,真的不用上大而全的前端框架,用这个思路能快速给业务一个可用的原型。

那 Pandas 是不是要被“换掉”了?

很多人一听“交互式表格库”,下意识以为要把 pandas 全扔掉,换成别的库。其实我自己的做法是:pandas 继续承担核心计算,只是“显示和交互层”别再是 print,而是一个可以点点点的表格。

你可以想象一条典型的数据科学工作流是这样的:

数据库 / CSV / 接口
         |
         v
      pandas
    (清洗、聚合)
         |
         v
 交互式表格(PandasGUI / Dtale / Streamlit + AgGrid)
         |
         v
 人眼看 / 人手改 / 导出 / 再写回

Pandas 负责“算”,这些交互库负责“给人看、给人改”。这俩并不冲突,反而是搭配起来特别顺手。

简单给你一个我自己的“决策指南”,你对照着自己的场景来:

  • 我一个人本机玩数据、画图之前想随便看看 → 直接 pandasgui.show(df),懒得搞浏览器
  • 我要在内网给几个人临时看一下数据,但不想搞登陆权限 → 放到测试机上跑 dtale.show(df, host=‘0.0.0.0’),丢地址给他们
  • 我要做一个正式一点的内部工具,可能还要接登录、权限、写库 → 基本上就是 Streamlit + AgGrid 这一套,把交互逻辑都封装好

当然,市面上还有别的选择,比如 Jupyter 里的 qgrid / ipyaggrid,适合 Notebook 深度用户;或者更重型的 BI 工具如 Tableau、Superset。这些方案各有侧重,选择最适合你当前场景和团队的即可。关键在于打破“数据结果只能静态看”的思维,让人与数据的交互变得更直接、高效。




上一篇:Rust设计模式精讲:后端开发中的Newtype、所有权与枚举错误处理实践
下一篇:Keystone框架实战:Python逆向工程中的动态汇编与代码注入
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-14 20:44 , Processed in 0.210863 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表