编写自己的Pandas风格的简单方法。
项目描述
Pandas Flavor
编写自己的Pandas风格的简单方法
Pandas 0.23添加了(简单)用于在Pandas对象上注册访问器的API。
Pandas-flavor通过以下方式扩展了Pandas的扩展API:
- 添加了对注册方法的支持。
- 使这些函数与较旧的Pandas版本向后兼容。
这意味着什么?
现在向Pandas DataFrame和Series添加自定义功能变得更容易了。
导入此包。编写一个简单的Python函数。使用以下装饰器之一注册函数。
为什么?
Pandas非常实用。它的通用目的是成为一个“灵活且强大的数据分析/操作库”。
Pandas Flavor 允许您添加针对特定领域或用例量身定制的功能。
也许您想向Pandas DataFrame添加新的写入方法?也许您想添加自定义绘图功能?也许还有其他?
注册访问器
访问器(在Pandas中)是附加到Pandas DataFrame/Series属性上的对象,提供了额外的、特定的功能。例如,pandas.DataFrame.plot
是一个提供绘图功能的访问器。
通过以下装饰器将函数注册并传递访问器名称,可以添加访问器。
# my_flavor.py
import pandas_flavor as pf
@pf.register_dataframe_accessor('my_flavor')
class MyFlavor(object):
def __init__(self, data):
self._data = data
def row_by_value(self, col, value):
"""Slice out row from DataFrame by a value."""
return self._data[self._data[col] == value].squeeze()
现在每个DataFrame都拥有这个访问器作为属性。
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
要查看其实际应用,请查看pdvega、PhyloPandas和pyjanitor!
注册方法
使用这个包,您可以直接将函数附加到Pandas对象上。不需要中间访问器。
# my_flavor.py
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 pandas as pd
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.row_by_value('x', 10)
# x 10
# y 0
# Name: 0, dtype: int64
注册方法跟踪
pandas_flavor 0.5.0版本的发布引入了注册方法调用跟踪。现在可以在注册方法执行周围添加额外的运行时逻辑,这可以用于一些支持任务。这个扩展是为了允许在pyjanitor中实现的方法链的可视化而引入的。
可用方法
- register_dataframe_method:直接将方法与pandas DataFrame注册。
- register_dataframe_accessor:将访问器(及其方法)与pandas DataFrame注册。
- register_series_method:直接将方法与pandas Series注册。
- register_series_accessor:将访问器(及其方法)与pandas Series注册。
安装
您可以使用pip进行安装
pip install pandas_flavor
或conda(感谢@ericmjl)!
conda install -c conda-forge pandas-flavor
贡献
欢迎提交拉取请求!如果您发现了一个错误,请不要犹豫,打开一个问题或提交一个PR。如果您不确定如何做,请查看这个简单指南。
如果您有一个功能请求,请打开一个问题或提交一个PR!
TL;DR
Pandas 0.23引入了一个更简单的API来扩展Pandas。这个API提供了两个关键装饰器register_dataframe_accessor
和register_series_accessor
,使用户能够将访问器注册到Pandas DataFrame和Series中。
Pandas Flavor最初是一个库,用于将这些装饰器回迁到旧版本的Pandas(<0.23)。在回迁过程中,注册直接到Pandas对象上的方法可能也是一个期望的特性。*
*很可能是Pandas故意没有实现这个功能。如果每个人开始用他们自定义的方法猴子补丁DataFrame,可能会导致Pandas社区中的混淆。Pandas的首选方法是通过注册包含您自定义方法的访问器来命名空间您的这些方法。
那么方法注册是如何工作的呢?
当您注册一个方法时,Pandas flavor实际上创建并注册了一个(这是微妙但重要的)自定义访问器类,通过继承您的函数的文档字符串来模拟方法的行为,并覆盖__call__
方法来调用您的函数。
- 继承您的函数的文档字符串
- 覆盖
__call__
方法以调用您的函数。
项目详情
pandas_flavor-0.6.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9fb8735102dcb65dae7ee5cda12b393ca134a909ebcfc0262c5cdc1d79ba007f |
|
MD5 | 1d44a312474d78742d81c09abc9d2722 |
|
BLAKE2b-256 | b8d97d35f745a46892478b07c1f196d91b3669a725c46035ac3483d3ecf9e113 |
pandas_flavor-0.6.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a32c9e2e0da702579320cf2bd0078cee91807713bc9c65ff522f6b0289899893 |
|
MD5 | 0580737070f450ac806cb555bde0b166 |
|
BLAKE2b-256 | 671abfb5574b215f530c7ac5be684f33d60b299abbebd763c203aa31755f2fb2 |