Skip to main content

编写自己的 Pandas 风味的简单方法。

项目描述

熊猫味

编写自己的 Pandas 风格的简单方法

Pandas 0.23 添加了一个(简单的)API,用于向 Pandas 对象注册访问器。

Pandas-flavor 通过以下方式扩展了 Pandas 的扩展 API:

  1. 还添加了对注册方法的支持。
  2. 使这些功能中的每一个都向后兼容旧版本的 Pandas。

这是什么意思?

现在向 Pandas DataFrames 和 Series 添加自定义功能变得更加简单。

导入这个包。写一个简单的python函数。使用以下装饰器之一注册函数。

为什么?

熊猫超级好用。它的总体目的是成为一个“灵活而强大的数据分析/操作库”。

Pandas Flavor允许您添加将 Pandas 定制到特定领域或用例的功能。

也许您想向 Pandas DataFrame 添加新的写入方法?也许您想要自定义绘图功能?也许还有别的?

注册访问者

访问器(在 pandas 中)是附加到 Pandas DataFrame/Series 上的属性的对象,提供额外的特定功能。例如,pandas.DataFrame.plot是一个提供绘图功能的访问器。

通过使用以下装饰器注册函数并向装饰器传递访问器名称来添加访问器。

# my_flavor.py

import pandas as pd
import pandas_flavor as pf

@pf.register_dataframe_accessor('my_flavor')
class MyFlavor(object):

  def __init__(self, data):
    self._data

    def row_by_value(self, col, value):
        """Slice out row from DataFrame by a value."""
        return self._data[self._data[col] == value].squeeze()

现在每个数据框都有这个访问器作为属性。

import my_flavor

# DataFrame.
df = pd.DataFrame(data={
  "x": [10, 20, 25],
  "y": [0, 2, 5]
})

# Print DataFrame
print(df)

# x  y
# 0  10  0
# 1  20  2
# 2  25  5

# Access this functionality
df.my_flavor.row_by_value('x', 10)

# x    10
# y     0
# Name: 0, dtype: int64

要查看实际情况,请查看pdvegaPhyloPandaspyjanitor

注册方法

使用此包,您可以将函数直接附加到 Pandas 对象。不需要中间访问器。

# my_flavor.py

import pandas as pd
import pandas_flavor as pf

@pf.register_dataframe_method
def row_by_value(df, col, value):
    """Slice out row from DataFrame by a value."""
    return df[df[col] == value].squeeze()
import my_flavor

# DataFrame.
df = DataFrame(data={
  "x": [10, 20, 25],
  "y": [0, 2, 5]
})

# Print DataFrame
print(df)

# x  y
# 0  10  0
# 1  20  2
# 2  25  5

# Access this functionality
df.row_by_value('x', 10)

# x    10
# y     0
# Name: 0, dtype: int64

可用方法

  • register_dataframe_method:直接使用 pandas DataFrame 注册方法。
  • register_dataframe_accessor:使用 pandas DataFrame 注册访问器(及其方法)。
  • register_series_method:直接向 pandas 系列注册方法。
  • register_series_accessor:使用 pandas 系列注册访问器(及其方法)。

安装

您可以使用pip安装:

pip install pandas_flavor

或康达(感谢@ericmjl)!

conda install -c conda-forge pandas-flavor

贡献

拉请求总是受欢迎的!如果您发现错误,请不要犹豫打开问题或提交 PR。如果您不确定如何操作,请查看此简单指南

如果您有功能请求,请打开问题或提交 PR!

TL;博士

Pandas 0.23 引入了一个更简单的 API 来扩展 Pandas。该 API 提供了两个关键的装饰器register_dataframe_accessorregister_series_accessor,使用户能够使用 Pandas DataFrames 和 Series注册访问器。

Pandas Flavor 起源于一个库,用于将这些装饰器反向移植到旧版本的 Pandas (<0.23)。在进行反向移植时,很明显将方法直接注册到 Pandas 对象可能也是一个理想的功能。*

*很可能 Pandas 故意选择不实现此功能。如果每个人都开始使用他们的自定义方法对 DataFrames 进行猴子修补,这可能会导致 Pandas 社区的混乱。首选的 Pandas 方法是通过注册包含您的自定义方法的访问器来命名您的方法。

那么方法注册是如何工作的呢?

当您注册一个方法时,Pandas 风格实际上创建并注册了一个(这是微妙但重要的)自定义访问器类,它通过以下方式模仿方法的行为:

  1. 继承你的函数的文档字符串
  2. 覆盖__call__调用函数的方法。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pandas_flavor-0.3.0.tar.gz (6.2 kB 查看哈希

已上传 source

内置分布

pandas_flavor-0.3.0-py3-none-any.whl (6.3 kB 查看哈希

已上传 py3