page contents

将 Pandas 换为交互式表格的 Python 库

df.head() 这东西我用了很多年,但真碰到几十列、几万行的数据,我还是嫌它难用。

attachments-2026-10-VMfEuf3V6ac6f3fdc2824.png

df.head() 这东西我用了很多年,但真碰到几十列、几万行的数据,我还是嫌它难用。

比如线上导出来一份失败订单:

import pandas as pd

df = pd.read_csv("failed_orders.csv")
df.head()

然后发现一个 timeout。

想看看还有多少?

df[df["error_msg"].str.contains("timeout", na=False)]

想按耗时倒序?

df.sort_values("cost_ms", ascending=False)

想只看某个服务?

再写一段过滤。

数据分析本身倒没什么问题,就是这个过程有点烦。尤其是临时排查数据,我根本不想围着一个 DataFrame 写十几行筛选代码。

后来我把 Notebook 里的表格展示换成了 ITables。

Pandas 还是那个 Pandas,数据清洗、聚合、计算都不用动。

但表格活了。

可以直接搜索、排序、翻页、滚动、按列过滤。

ITables 官方目前定位得也很明确:它不是重新造一个 DataFrame,而是改变 Pandas、Polars 等 DataFrame 的展示方式,底层使用 DataTables。现在也能用在 Jupyter、VS Code、Streamlit、Dash、Shiny 等环境里。

安装就一个包:

pip install itables

我平时不会一上来把所有 DataFrame 都改成交互模式,排查数据时哪张表需要看,就单独扔进去。

比如有一份接口失败记录:

import pandas as pd
from itables import show

records = pd.read_csv("gateway_error_records.csv")

focus = (
    records.loc[
        records["status_code"] >= 500,
        [
            "request_time",
            "trace_id",
            "service",
            "api",
            "status_code",
            "cost_ms",
            "error_msg",
        ],
    ]
    .sort_values("cost_ms", ascending=False)
)

show(
    focus,
    pageLength=25,
    scrollX=True,
    column_filters="header",
)

这时候出来的就不是 Pandas 那块静态 HTML 了。

我可以直接在表格里点 cost_ms 排序,看看最慢的是哪几个请求。

搜一个 trace_id,不用重新执行:

focus[focus["trace_id"] == "..."]

想只看某个服务,也直接在对应列过滤。

这个体验在临时排障的时候挺明显。

因为很多时候,我其实还不知道自己要查什么。

如果已经明确知道:

查 payment-service 中 cost_ms > 3000 的请求。

那写 Pandas 当然没问题。

怕的是这种:

这批错误数据看着有点不对,先翻翻。

这种情况下,交互表格比不停修改 DataFrame 条件舒服得多。

而且有个地方我挺喜欢。

如果 Notebook 本来就是拿来做数据排查的,可以直接把整个 Notebook 的 DataFrame 展示方式接管掉:

import itables

itables.init_notebook_mode()

orders = pd.read_parquet("orders.parquet")

bad_orders = orders.loc[
    orders["pay_state"].eq("FAILED"),
    ["order_no", "channel", "amount", "pay_state", "created_at"],
]

bad_orders

最后这一行不用再包 show()。

正常输出 bad_orders,出来的就是交互式表格。

ITables 实际上改的是 DataFrame 在 Notebook 里的 HTML 渲染方式,所以不会影响你前面的 Pandas 数据处理逻辑。需要的时候也可以关闭,不至于为了一个表格展示把现有分析代码推倒重来。

这点很重要。

我不太喜欢那种为了一个“小功能”,强迫你把整套代码都换掉的库。

还有一种情况特别适合它:字段太多。

比如我以前排查批量导入失败,经常碰到这种数据:

task_id
batch_no
source_file
row_no
customer_code
customer_name
mobile
province
city
check_state
error_code
error_detail
created_at
operator
...

Pandas 默认输出一缩,基本就变成:

task_id batch_no ... created_at operator

中间那几列恰好还是我要看的。

你当然可以改:

pd.set_option("display.max_columns", None)

然后 Notebook 横着撑出去一公里。

我一般懒得这么干。

直接:

show(
    import_errors,
    scrollX=True,
    pageLength=30,
    column_filters="header",
)

横向滚。

哪个字段不对就筛哪个字段。

这种事情代码越少越好。

不过这里得把一个误区说清楚。

ITables 不能替代 Pandas。

标题里说“把 Pandas 换成交互式表格”,准确一点讲,是:

把 Pandas 默认的表格展示换掉。

比如这些活:

df.groupby(...)
df.merge(...)
df.drop_duplicates(...)
df.fillna(...)
df.astype(...)

还是 Pandas 干。

ITables 负责的是数据已经算出来以后,你怎么查看它。

所以我的使用习惯一直是两层:

Pandas
    ↓
清洗 / 聚合 / 计算 / 过滤
    ↓
ITables
    ↓
搜索 / 排序 / 翻页 / 人肉检查

别反过来。

能在 Pandas 里一次性完成的正式数据处理,不要依赖鼠标点几下完成。

因为代码还能重跑。

你昨天在表格里点了什么过滤条件,第二天大概率已经忘了。

交互表格适合“看数据”,不是替你写数据处理逻辑。

另外大表我也不会无脑往里面塞。

100 万行日志读进 DataFrame,再指望浏览器给你做一套丝滑的前端表格,这个方向本身就有点别扭。

ITables 对较大的表格也有降采样等处理机制,当前版本还支持 Pandas、Polars,并且从 2.6 起核心包不再强依赖 Pandas;但这不代表前端表格适合承担无限量数据浏览。

真碰到大数据,我一般前面先砍:

suspects = logs.loc[
    (logs["level"] == "ERROR")
    & (logs["service"] == "order-api")
    & (logs["cost_ms"] > 1500)
]

show(
    suspects,
    pageLength=50,
    scrollX=True,
)

先靠 Pandas 把范围收下来。

几千、几万条候选数据,再交给交互表格慢慢翻。

这套顺序我比较信。

而不是:

show(全部数据)

然后祈祷浏览器别死。

如果平时主要用 Jupyter 做 CSV、Excel、接口数据、日志导出分析,ITables 我觉得值得装。

它解决的事情很小。

没有让 Pandas 快十倍,也没有重新发明数据分析。

就是把原来这个:

df

从一块只能看的静态表格,变成了一块可以现场翻、搜、筛、排序的表格。

但写代码久了就知道,真正每天能省点烦躁的工具,很多时候解决的都不是什么大问题。

我现在临时拿到一份脏数据,通常还是 Pandas 先处理。

处理完最后一句:

show(result)

然后才开始找问题。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

 

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2480 篇文章

作家榜 »

  1. Pack 2480 文章
  2. 轩辕小不懂 2403 文章
  3. 小柒 2228 文章
  4. Nen 576 文章
  5. 王昭君 216 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章