Pandas生态:Data-Profiling、Pandera、PandasGUI、PyJanitor、PandaSQL

发布时间:2026/7/29 0:30:48
Pandas生态:Data-Profiling、Pandera、PandasGUI、PyJanitor、PandaSQL 在Python开发者世界里Pandas的地位无可撼动围绕Pandas的生态库也非常多本文梳理总结其中的几个。Data-Profilingfg-data-profiling一个面向DataFrame的开源GitHub13.7K Star1.8K Fork探索性数据分析EDA工具导入时使用data_profiling。可将DataFrame自动整理一键生成包含概览、字段类型、缺失值、重复值、相关性、基础统计、告警和可导出的交互式HTML报告。对数据分析和数据治理来说标准化查看数据质量报告官方文档。命名历史最早包名是pandas-profiling最后一个版本停留在23年1月31日发布的3.6.6后来改名为ydata-profiling最后一个版本停留在26年4月23日发布的4.18.4最新命名是fg-data-profiling最后一个版本也是26年4月23日发布不过版本号是4.19.1特点一行画像传入DataFrame就能得到表级概览和字段级分析适合数据接手时快速摸底质量告警缺失值、重复值、偏斜、常量列等问题会被自动汇总减少人工漏看方便导出报告可以导出为HTML或JSON既能给人看也能接入自动化检查适合新数据集摸底、数据质量报告、Notebook分析、ETL前置检查、字段变化审计以及需要把分析结果导出给团队协作的场景。相比PandasGUI侧重交互式展示、Sweetviz适合对比数据集优势在于统计指标全面、自动生成警告非常适合快速了解陌生数据集。缺点处理10万行以上的大数据集时速度较慢。建议在数据清洗前先用它摸底针对警告列表里的问题逐一处理。不适合超大数据的实时分析也不适合替代完整的数据质量平台。画像报告很有帮助但最终的数据修复、业务规则和告警阈值仍然需要团队自己定义。实战基于pip安装pip install fg-data-profiling示例importpandasaspdfromdata_profilingimportProfileReport dfpd.DataFrame({city:[Paris,Paris,Berlin,Rome],sales:[10,None,30,30]})withcontextlib.redirect_stderr(io.StringIO()):profileProfileReport(df,titleSales profile,minimalTrue,progress_barFalse,correlationsNone)descprofile.description_set salesprofile.description_set.variables[sales]payloadjson.loads(profile.to_json())# 自带索引名n-行数、n_var-列数、n_cells_missing-缺失单元格数量print(rows:,int(desc.table[n]))print(sales missing:,int(sales[n_missing]))print(sales mean:,round(float(sales[mean]),2))print(sales max:,float(sales[max]))print(top-level:,list(payload.keys())[:5])print(table rows:,payload[table][n])print(variables:,list(payload[variables].keys()))示例2dfpd.read_csv(titanic.csv)profileProfileReport(df,titleTitanic数据探索报告)profile.to_file(report.html)print(df[Age].describe())# 手动检查相关性库会自动完成并标红警告corr_matrixdf.corr(numeric_onlyTrue)print(corr_matrix[Fare].sort_values(ascendingFalse))report.html文件即报告几大模块Variables自动识别每列的类型并给出统计结果数值列会有均值、分位数分类列则会展示频次分布Alerts自动标出数据中的问题如高缺失率、偏态分布或强相关性特征相关矩阵热力图能帮你快速发现共线性问题避免后续建模踩坑最佳实践对大表先抽样或使用最小配置避免报告生成过慢固定关键字段的类型、缺失率和唯一性阈值报告JSON入库时记录数据版本和生成时间Pandera官网专门处理表格数据校验的开源GitHub4.4K Star426 Fork工具如DataFrame把校验规则写成Schema让ETL、特征工程、批量报表生成、数据分析脚本或接口在入口处就能发现问题而不是等到下游模型或图表报出更难排查的错误官方文档。特点列级规则Column、Field和Check能直接表达类型、范围、空值和字符串约束批量错误lazyTrue可一次性收集多个失败点适合数据质量报告表级检查不仅看单列也能检查跨列、分组和整表统计约束列级Schema适合防守字段漂移表级校验适合防守统计异常两者一起用才能覆盖真实数据管道里的大部分事故。不适合单个JSON对象校验、强领域模型建模或对极致性能要求高且数据量巨大到无法承受额外校验的热路径。实战基于pip安装pip install pandera示例fromimportlib.metadataimportversionimportpandasaspdimportpandera.pandasaspafrompandera.typingimportSeriesclassSalesSchema(pa.DataFrameModel):sku:Series[str]pa.Field(str_startswithSKU-)qty:Series[int]pa.Field(ge1)price:Series[float]pa.Field(gt0)dfpd.DataFrame({sku:[SKU-1,SKU-2],qty:[2,5],price:[19.9,4.5]})validatedSalesSchema.validate(df)print(validated.assign(totalvalidated.qty*validated.price))# 找出多个脏数据点schemapa.DataFrameSchema({email:pa.Column(str,nullableFalse),score:pa.Column(int,checkspa.Check.between(0,100)),})dfpd.DataFrame({email:[aexample.com,None],score:[98,130]})try:schema.validate(df,lazyTrue)exceptpa.errors.SchemaErrorsasexc:cols[column,failure_case,index]print(exc.failure_cases[cols].to_string(indexFalse))schemapa.DataFrameSchema({team:pa.Column(str),revenue:pa.Column(float,checkspa.Check.ge(0)),},checkspa.Check(lambdadf:df.groupby(team)[revenue].sum().max()1000,errorsingle team revenue too high))fordfin[pd.DataFrame({team:[A,B],revenue:[120.0,80.0]}),pd.DataFrame({team:[A,A],revenue:[700.0,500.0]})]:try:schema.validate(df)print(batch ok:,df[revenue].sum())exceptpa.errors.SchemaErrorasexc:print(batch failed:,exc.reason_code)注意事项给关键输入表固定列名、类型和空值策略对边界值、缺列、异常分组写测试数据在生产任务里记录failure_cases方便回溯数据源PandasGUI一个为Pandas DataFrame提供图形用户界面的开源GitHub3.3K Star239 Fork工具允许用户通过图形界面查看、绘图和分析数据从而简化数据处理和分析过程。主要功能查看 DataFrame 和 Series支持 MultiIndex交互式绘图可以生成各种图表如折线图、条形图、箱型图等过滤数据可以根据条件筛选数据统计摘要提供数据的统计信息数据编辑和复制/粘贴可以直接在界面中编辑数据并进行复制粘贴操作导入 CSV 文件支持拖放导入 CSV 文件搜索工具栏可以快速搜索数据数据集官方自带示例数据集实战基于pip安装pip install pandasgui示例importpandasaspdfrompandasguiimportshowfrompandasgui.datasetsimportpokemon,titanic,all_datasets dfpd.DataFrame({a:[1,2,3],b:[4,5,6],c:[7,8,9]})show(df)show(pokemon,titanic)show(**all_datasets)PyJanitor一个基于Pandas的开源GitHub1.5K Star190 Fork数据清洗和预处理库旨在简化数据科学工作流中的常见数据操作。提供一组扩展Pandas功能的方法使数据操作更加方便和简洁。功能定位等价于R语言里Janitor支持链式调用完全兼容Pandas官方文档。特性链式操作允许通过链式调用简化复杂的数据清洗任务易用性提供直观和简洁的API降低数据预处理的复杂度集成性无缝集成Pandas扩展其功能而不改变其使用习惯通用性涵盖数据清洗的多种常见操作包括处理缺失值、去重、重命名列、数据转换等使用场景数据预处理在数据科学和机器学习项目中用于数据清洗和转换ETL流程在数据管道中用于提取、转换和加载数据数据分析在探索性数据分析过程中快速清理和准备数据函数case_when()多条件判断also()实战基于pip安装pip install pyjanitor示例importpandasaspdimportjanitor data{A:[1,2,3],B:[a,b,c],C:[None,2.5,3.0],D:[1,1,1]}dfpd.DataFrame(data)# 移除空值dfdf.remove_empty()# 去除重复行dfdf.drop_duplicate()# 重命名列名dfdf.rename_column(A,Column_A)# 转换列类型dfdf.change_type(Column_A,float)# 增加新列dfdf.add_column(E,[4,5,6])print(df)PandaSQL开源GitHub1.4K Star184 Fork库用写SQL的方式来查询Pandas的DataFrame不用学一堆Pandas的复杂语法。代码库已于26年3月23日归档。实战基于pip安装pip install pandasql示例importpandasaspdfrompandasqlimportsqldf dfpd.DataFrame({name:[张三,李四,王五,赵六],age:[25,30,28,22],city:[北京,上海,北京,深圳]})# 用SQL查询query SELECT name, age FROM df WHERE age 25 ORDER BY age DESC resultsqldf(query,locals())print(result)# 多表查询df1pd.DataFrame({id:[1,2],name:[A,B]})df2pd.DataFrame({id:[1,2],score:[90,85]})query SELECT df1.name, df2.score FROM df1 JOIN df2 ON df1.id df2.id resultsqldf(query,locals())# 分组聚合query SELECT city, COUNT(*) as count, AVG(age) as avg_age FROM df GROUP BY city resultsqldf(query,locals())