生态系统
越来越多的软件包正在基于 pandas 构建,以满足数据准备、分析和可视化方面的特定需求。这是令人鼓舞的,因为它意味着 pandas 不仅帮助用户处理他们的数据任务,而且为开发人员提供了一个更好的起点来构建功能强大且更专注的数据工具。创建补充 pandas 功能的库也使 pandas 开发能够专注于其最初的要求。
这是一个由社区维护的项目列表,这些项目基于 pandas,旨在为 PyData 空间提供工具。pandas 核心开发团队不一定认可此列表中的任何特定项目,也不了解任何特定库的维护状态。
要获取更完整的依赖于 pandas 的项目列表,请查看 pandas 的 libraries.io 使用页面 或 在 pypi 中搜索 pandas。
我们希望让用户更容易找到这些项目,如果您知道其他您认为应该包含在此列表中的重要项目,请告诉我们。
统计和机器学习
Statsmodels
Statsmodels 是著名的 Python “统计和计量经济学库”,它与 pandas 有着长期的特殊关系。Statsmodels 提供强大的统计、计量经济学、分析和建模功能,这些功能超出了 pandas 的范围。Statsmodels 利用 pandas 对象作为计算的基础数据容器。
Featuretools
Featuretools 是一个基于 pandas 构建的用于自动特征工程的 Python 库。它擅长使用可重用的特征工程“基元”将时间和关系数据集转换为用于机器学习的特征矩阵。用户可以在 Python 中贡献自己的基元并与社区的其他成员共享。
Compose
Compose 是一个用于数据标注和预测工程的机器学习工具。它允许您通过参数化预测问题并将时间驱动的关系数据转换为具有截止时间的目标值来构建标注过程,这些目标值可用于监督学习。
STUMPY
STUMPY 是一个功能强大且可扩展的 Python 库,用于现代时间序列分析。其核心是,STUMPY 有效地计算了一种称为 矩阵轮廓 的东西,它可用于各种时间序列数据挖掘任务。
可视化
Altair
Altair 是一个用于 Python 的声明式统计可视化库。使用 Altair,您可以花更多时间来理解您的数据及其含义。Altair 的 API 简单、友好且一致,并构建在强大的 Vega-Lite JSON 规范之上。这种优雅的简洁性以最少的代码量产生了美丽而有效的可视化效果。Altair 与 Pandas DataFrames 一起使用。
Bokeh
Bokeh 是一个用于大型数据集的 Python 交互式可视化库,它原生使用最新的 Web 技术。它的目标是提供优雅、简洁的 Protovis/D3 风格的新图形构建,同时为瘦客户端提供对大型数据的交互式高性能。
Pandas-Bokeh 为 Bokeh 提供了一个高级 API,可以通过以下方式加载为本机 Pandas 绘图后端
pd.set_option("plotting.backend", "pandas_bokeh")
它与 matplotlib 绘图后端非常相似,但提供了交互式的基于 Web 的图表和地图。
pygwalker
PyGWalker 是一个交互式数据可视化和探索性数据分析工具,它基于 Graphic Walker,支持可视化、清理和注释工作流程。
pygwalker 可以将交互式创建的图表保存到 Graphic-Walker 和 Vega-Lite JSON。
import pygwalker as pyg
pyg.walk(df)
seaborn
Seaborn 是一个基于 matplotlib 的 Python 可视化库。它提供了一个高级、面向数据集的接口,用于创建有吸引力的统计图形。Seaborn 中的绘图函数理解 pandas 对象,并在内部利用 pandas 分组操作来支持简洁地指定复杂的可视化。Seaborn 也超越了 matplotlib 和 pandas,可以选择在绘图时执行统计估计,跨观察结果聚合并可视化统计模型的拟合,以强调数据集中模式。
import seaborn as sns
sns.set_theme()
plotnine
Hadley Wickham 的 ggplot2 是 R 语言中一个基础的探索性可视化包。它基于 "图形语法",提供了一种强大、声明式且极其通用的方式来生成任何类型数据的定制图表。其他语言也有各种实现。对于 Python 用户来说,一个不错的实现是 has2k1/plotnine。
IPython Vega
IPython Vega 利用 Vega 在 Jupyter Notebook 中创建图表。
Plotly
Plotly 的 Python API 使得交互式图形和网络共享成为可能。地图、二维、三维和实时流式图表使用 WebGL 和 D3.js 渲染。该库支持直接从 pandas DataFrame 绘制图表,并支持基于云的协作。matplotlib、ggplot for Python 和 Seaborn 的用户可以将图形转换为交互式网页图表。图表可以在 IPython Notebooks 中绘制,使用 R 或 MATLAB 编辑,在 GUI 中修改,或嵌入到应用程序和仪表板中。Plotly 免费提供无限共享,并提供 云、离线 或 本地 帐户供私人使用。
Lux
Lux 是一个 Python 库,通过自动化可视化数据探索过程,方便快速轻松地进行数据实验。要使用 Lux,只需在 pandas 旁边添加一个额外的导入即可
import lux
import pandas as pd
df = pd.read_csv("data.csv")
df # discover interesting insights!
通过打印数据框,Lux 会自动 推荐一组可视化,突出显示数据框中有趣的趋势和模式。用户可以利用任何现有的 pandas 命令,无需修改代码,同时能够可视化他们的 pandas 数据结构(例如,DataFrame、Series、Index)。Lux 还提供了一种 强大、直观的语言,允许用户创建 Altair、matplotlib 或 Vega-Lite 可视化,而无需考虑代码层面的问题。
D-Tale
D-Tale 是一款轻量级的网页客户端,用于可视化 Pandas 数据结构。它提供了一个丰富的类似电子表格的网格,作为许多 Pandas 功能(查询、排序、描述、相关性等)的包装器,使用户可以快速操作其数据。它还提供了一个使用 Plotly Dash 的交互式图表构建器,允许用户构建美观且可移植的可视化效果。D-Tale 可以使用以下命令调用
import dtale
dtale.show(df)
D-Tale 与 Jupyter 笔记本、Python 终端、Kaggle 和 Google Colab 无缝集成。以下是一些 网格 的演示。
hvplot
hvPlot 是一个基于 HoloViews 的 PyData 生态系统的高级绘图 API。它可以通过以下方式加载为本机 Pandas 绘图后端
pd.set_option("plotting.backend", "hvplot")
IDE
IPython
IPython 是一个交互式命令 shell 和分布式计算环境。IPython 的制表符补全功能适用于 Pandas 方法以及 DataFrame 列等属性。
Jupyter Notebook / Jupyter Lab
Jupyter Notebook 是一款用于创建 Jupyter 笔记本的 Web 应用程序。Jupyter 笔记本是一个 JSON 文档,包含一个有序的输入/输出单元列表,这些单元可以包含代码、文本、数学公式、绘图和富媒体。Jupyter 笔记本可以通过 Web 界面中的“下载为”和 shell 中的 jupyter convert
转换为多种开放标准输出格式(HTML、HTML 演示文稿幻灯片、LaTeX、PDF、ReStructuredText、Markdown、Python)。
Pandas DataFrames 实现 _repr_html_
和 _repr_latex
方法,这些方法被 Jupyter Notebook 用于显示(缩写)HTML 或 LaTeX 表格。LaTeX 输出已正确转义。(注意:HTML 表格可能与非 HTML Jupyter 输出格式兼容,也可能不兼容。)
有关 Pandas display.
设置,请参阅 选项和设置。
Spyder
Spyder 是一个跨平台的基于 PyQt 的 IDE,它将软件开发工具的编辑、分析、调试和分析功能与类似 MATLAB 或 Rstudio 的科学环境的数据探索、交互式执行、深度检查和丰富可视化功能相结合。
它的 变量资源管理器 允许用户像“电子表格”一样查看、操作和编辑 Pandas Index
、Series
和 DataFrame
对象,包括复制和修改值、排序、显示“热图”、转换数据类型等等。还可以重命名、复制 Pandas 对象,添加新列,将数据复制/粘贴到剪贴板(作为 TSV),以及将数据保存/加载到文件。Spyder 还可以通过一个复杂的导入向导从各种纯文本和二进制文件或剪贴板导入数据到新的 Pandas DataFrame 中。
大多数 Pandas 类、方法和数据属性可以在 Spyder 的 编辑器 和 IPython 控制台 中自动完成,而 Spyder 的 帮助窗格 可以使用 Sphinx 自动或按需检索和渲染 Pandas 对象的 Numpydoc 文档,并以富文本格式显示。
API
pandas-datareader
pandas-datareader
是一个用于 pandas 的远程数据访问库(PyPI:pandas-datareader
)。它基于位于 pandas.io.data
和 pandas.io.wb
中的功能,但在 v0.19 中被拆分。在 pandas-datareader 文档 中了解更多信息。
以下数据源可用
- Google Finance
- Tiingo
- Morningstar
- IEX
- Robinhood
- Enigma
- Quandl
- FRED
- Fama/French
- 世界银行
- 经合组织
- 欧盟统计局
- TSP 基金数据
- 纳斯达克交易者符号定义
- Stooq 指数数据
- MOEX 数据
pandaSDMX
pandaSDMX 是一个用于检索和获取以 SDMX 2.1 格式发布的统计数据和元数据的库,SDMX 2.1 是 ISO 标准,被统计局、中央银行和国际组织等机构广泛使用。pandaSDMX 可以将数据集和相关的结构元数据(包括数据流、代码列表和数据结构定义)公开为 pandas Series 或 MultiIndexed DataFrames。
fredapi
fredapi 是一个用于圣路易斯联邦储备银行提供的 联邦储备经济数据 (FRED) 的 Python 接口。它适用于 FRED 数据库和 ALFRED 数据库,该数据库包含时间点数据(即历史数据修订)。fredapi 为 FRED HTTP API 提供了 Python 包装器,还提供了一些方便的方法来解析和分析来自 ALFRED 的时间点数据。fredapi 使用 pandas 并以 Series 或 DataFrame 的形式返回数据。此模块需要一个 FRED API 密钥,您可以在 FRED 网站上免费获取。
特定领域
Geopandas
Geopandas 扩展了 pandas 数据对象以包含地理信息,这些信息支持几何运算。如果您的工作涉及地图和地理坐标,并且您喜欢 pandas,那么您应该仔细看看 Geopandas。
gurobipy-pandas
gurobipy-pandas 提供了一个方便的访问器 API,用于将 pandas 与 gurobipy 连接起来。它使用户能够更轻松、更高效地从存储在 DataFrame 和 Series 中的数据构建数学优化模型,并将解决方案直接读回为 pandas 对象。
阶梯函数
阶梯函数是一个数据分析包,基于 pandas 和 numpy,用于对数学阶梯函数进行建模和操作。它为定义在实数、日期时间和时间增量域上的阶梯函数提供了丰富的算术运算、关系运算、逻辑运算、统计运算和聚合。
xarray
xarray 通过提供核心 pandas 数据结构的 N 维变体,将 pandas 的标记数据能力带到了物理科学领域。它的目标是提供一个类似于 pandas 且与 pandas 兼容的工具包,用于对多维数组进行分析,而不是 pandas 擅长的表格数据。
输入/输出
NTV-pandas
NTV-pandas 提供了一个 JSON 转换器,它支持比 pandas 直接支持的更多数据类型。
它支持以下数据类型
该接口始终是可逆的(转换往返),支持两种格式(JSON-NTV 和 JSON-TableSchema)。
示例
import ntv_pandas as npd
jsn = df.npd.to_json(table=False) # save df as a JSON-value (format Table Schema if table is True else format NTV )
df = npd.read_json(jsn) # load a JSON-value as a `DataFrame`
df.equals(npd.read_json(df.npd.to_json(df))) # `True` in any case, whether `table=True` or not
BCPandas
BCPandas 提供了从 pandas 到 Microsoft SQL Server 的高性能写入,远远超过了原生 df.to_sql
方法的性能。在内部,它使用 Microsoft 的 BCP 实用程序,但复杂性完全从最终用户那里抽象出来。经过严格测试,它是 df.to_sql
的完整替代品。
Deltalake
Deltalake python 包允许您在 Python 中本地访问存储在 Delta Lake 中的表,而无需使用 Spark 或 JVM。它提供了 delta_table.to_pyarrow_table().to_pandas()
方法,用于将任何 Delta 表转换为 Pandas 数据帧。
内存外
Cylon
Cylon 是一个快速、可扩展、分布式内存并行运行时,具有类似 pandas 的 Python DataFrame API。 “核心 Cylon” 使用 C++ 实现,使用 Apache Arrow 格式在内存中表示数据。Cylon DataFrame API 实现了 pandas 的大多数核心运算符,例如合并、过滤、联接、连接、分组、删除重复项等。这些运算符旨在跨数千个内核工作,以扩展应用程序。它可以与 pandas DataFrame 交互,通过从 pandas 读取数据或将数据转换为 pandas,以便用户可以选择性地扩展其 pandas DataFrame 应用程序的部分。
from pycylon import read_csv, DataFrame, CylonEnv
from pycylon.net import MPIConfig
# Initialize Cylon distributed environment
config: MPIConfig = MPIConfig()
env: CylonEnv = CylonEnv(config=config, distributed=True)
df1: DataFrame = read_csv('/tmp/csv1.csv')
df2: DataFrame = read_csv('/tmp/csv2.csv')
# Using 1000s of cores across the cluster to compute the join
df3: Table = df1.join(other=df2, on=[0], algorithm="hash", env=env)
print(df3)
Dask
Dask 是一个用于分析的灵活并行计算库。Dask 为内存外、并行和分布式计算提供了熟悉的 DataFrame
接口。
Dask-ML
Dask-ML 使用 Dask 以及现有的机器学习库(如 Scikit-Learn、XGBoost 和 TensorFlow)实现并行和分布式机器学习。
Ibis
Ibis 提供了一种标准方法来编写分析代码,该代码可以在多个引擎中运行。它有助于弥合本地 Python 环境(如 pandas)与远程存储和执行系统(如 Hadoop 组件(如 HDFS、Impala、Hive、Spark)和 SQL 数据库(Postgres 等))之间的差距。
考拉
Koalas 在 Apache Spark 之上提供了一个熟悉的 pandas DataFrame 接口。它使用户能够利用一台机器上的多核或多台机器的集群来加速或扩展他们的 DataFrame 代码。
Modin
modin.pandas
DataFrame 是 pandas 的并行和分布式直接替换。这意味着您可以将 Modin 与现有的 pandas 代码一起使用,或者使用现有的 pandas API 编写新代码。Modin 可以利用您的整个机器或集群来加速和扩展您的 pandas 工作负载,包括传统上耗时的任务,例如数据导入(read_csv
、read_excel
、read_parquet
等)。
# import pandas as pd
import modin.pandas as pd
df = pd.read_csv("big.csv") # use all your cores!
Pandarallel
Pandarallel 提供了一种简单的方法,只需更改一行代码即可将您的 pandas 操作并行化到所有 CPU 上。它还会显示进度条。
from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True)
# df.apply(func)
df.parallel_apply(func)
Vaex
越来越多的软件包正在 pandas 之上构建,以满足数据准备、分析和可视化方面的特定需求。Vaex 是一个用于 Out-of-Core DataFrames(类似于 Pandas)的 python 库,用于可视化和探索大型表格数据集。它可以在 N 维网格上计算统计信息,例如平均值、总和、计数、标准差等,每秒高达十亿 (10^9) 个对象/行。可视化是使用直方图、密度图和 3D 体积渲染完成的,允许对大数据进行交互式探索。Vaex 使用内存映射、零内存复制策略和延迟计算来实现最佳性能(不浪费内存)。
vaex.from_pandas
vaex.to_pandas_df
Hail 查询
一个面向遗传学社区的 Out-of-Core、抢占安全、分布式 DataFrame 库。Hail Query 附带磁盘数据格式、内存数据格式、表达式编译器、查询规划器和分布式排序算法,所有这些都旨在加速对大型基因组测序数据矩阵的查询。
使用 pandas 操作 Hail 生成的摘要统计信息或其他小型聚合通常是最简单的。为此,Hail 提供了从 pandas DataFrame 导入和导出的原生功能。
数据清理和验证
pyjanitor
Pyjanitor 提供了一个干净的 API 用于清理数据,使用方法链。
Pandera
Pandera 提供了一个灵活且表达能力强的 API,用于对 DataFrame 执行数据验证,以使数据处理管道更具可读性和鲁棒性。DataFrame 包含 pandera 在运行时明确验证的信息。这在生产关键数据管道或可重复研究设置中很有用。
扩展数据类型
Pandas 提供了一个接口来定义扩展类型以扩展 NumPy 的类型系统。以下库实现了该接口以提供 NumPy 或 pandas 中没有的类型,这些类型与 pandas 的数据容器配合良好。
awkward-pandas
Awkward-pandas 提供了一种扩展类型,用于在 pandas 的 Series 和 DataFrame 中存储Awkward Arrays。它还提供了一个访问器,用于对 awkward 类型的 Series 使用 awkward 函数。
Pandas-Genomics
Pandas-Genomics 提供了一种扩展类型和扩展数组,用于处理基因组数据。它还包括用于基因组数据的 QC 和分析的许多有用属性和方法的 genomics
访问器。
Physipandas
Physipandas 提供了一种扩展,用于操作与物理单位(如米或焦耳)相关的物理量(如标量和 numpy.ndarray),以及将 physipy
访问器与 pandas Series 和 Dataframe 集成的附加功能。
Pint-Pandas
Pint-Pandas 提供了一种扩展类型,用于存储带单位的数值数组。这些数组可以存储在 pandas 的 Series 和 DataFrame 中。使用 pint 的扩展数组在 Series 和 DataFrame 列之间进行的操作将是单位感知的。
文本扩展
Pandas 的文本扩展提供扩展类型来涵盖用于表示自然语言数据的常见数据结构,以及将流行的自然语言处理库的输出转换为 Pandas DataFrames 的库集成。
访问器
提供 扩展访问器 的项目目录。这方便用户发现新的访问器,也方便库作者协调命名空间。
库 | 访问器 | 类 |
---|---|---|
awkward-pandas | ak |
Series |
pdvega | vgplot |
Series , DataFrame |
pandas-genomics | genomics |
Series , DataFrame |
pint-pandas | pint |
Series , DataFrame |
physipandas | physipy |
Series , DataFrame |
composeml | slice |
DataFrame |
gurobipy-pandas | gppd |
Series , DataFrame |
阶梯函数 | sc |
Series , DataFrame |
woodwork | slice |
Series , DataFrame |
开发工具
pandas-stubs
虽然 pandas 存储库是部分类型化的,但该软件包本身并没有公开此信息以供外部使用。安装 pandas-stubs 以启用 pandas API 的基本类型覆盖。
通过阅读这些问题了解更多信息 14468,26766,28142。
在 GitHub 页面 上查看安装和使用说明。
Hamilton
Hamilton 是一个声明式数据流框架,它来自 Stitch Fix。它旨在帮助人们管理 Pandas 代码库,特别是针对机器学习模型的特征工程。
它规定了一种有见地的范式,确保所有代码都是
- 单元测试
- 集成测试友好
- 文档友好
- 转换逻辑是可重用的,因为它与使用它的上下文分离。
- 可与运行时数据质量检查集成。
这有助于您扩展 pandas 代码库,同时保持维护成本低廉。
有关更多信息,请参阅 文档。