跳转到主要内容

用于处理和交互数据框的有用函数、类和工具。

项目描述

Latest Version image License Python Versions CI LINTER Coverage

动机

《dataframing》包提供了使用数据框的有用函数。

数据转换

主要目标是允许您以易于使用、理解结构如何连接以及允许您进行类型化工作的方式将一个数据框结构转换为另一个。

它假设您有一个定义数据框的《Protocol》(顺便说一句,这是一件方便的事情!)例如

>>> from typing import Protocol
>>> import dataframing as dfr
>>>
>>> class Original(Protocol):
...     last_name: str
...     first_name: str
>>>
>>> class Modified(Protocol):
...    full_name: str

现在我们构建一个连接《Original》和《Modified》的转换器

>>> with dfr.morph(Original, Modified) as (ori2mod, source, target):
...    target.full_name = dfr.wrap("{}, {}".format, source.last_name, source.first_name)

现在可以使用它了!

>>> row = dict(last_name="Cleese", first_name="John")
>>> ori2mod.transform_record(row)
{'full_name': 'Cleese, John'}

请注意,我们使用字典来演示这一点,但它也可以用于数据框行、完整的数据框(或字典的迭代器)。

>>> data = [
...   dict(last_name="Cleese", first_name="John"),
...   dict(last_name="Gilliam", first_name="Terry")
...   ]
>>> ori2mod.transform_collection(data)
[{'full_name': 'Cleese, John'}, {'full_name': 'Gilliam, Terry'}]

如果您打算经常使用某个特定功能,您可以将它封装一次并多次使用。这也帮助保持转换器的视觉清洁。

>>> fullnamer = dfr.wrap("{}, {}".format)
>>> with dfr.morph(Original, Modified) as (ori2mod, source, target):
...    target.full_name = fullnamer(source.last_name, source.first_name)

为了展示如何从一个列创建两个列,我们将构建反向转换器。

>>> def splitter(s: str) -> tuple[str, str]:
...     part1, part2 = s.split(",")
...     return part1.strip(), part2.strip()
>>> namesplitter = dfr.wrap(splitter)
>>> with dfr.morph(Modified, Original) as (mod2ori, source, target):
...    target.last_name, target.first_name = namesplitter(source.full_name)
>>>
>>> row = dict(full_name="Cleese, John")
>>> mod2ori.transform_record(row)
{'last_name': 'Cleese', 'first_name': 'John'}

输入/输出

您还可以使用它来保存和加载数据。

>>> dfr.save(my_dataframe, "example.xlsx") # doctest: +SKIP
>>> df = dfr.load("example.xlsx") # doctest: +SKIP

为什么使用这个而不是标准的《pandas.to_excel》?《save》执行两项额外操作

  1. 将存储在《my_dataframe.attrs》中的元数据从/到另一个工作表。
  2. 计算数据和元数据哈希并将其存储在元数据工作表中。

加载将比较数据内容与存储的哈希。此行为对数据验证很有用,但可以使用《use_hash》关键字参数禁用。

另一组有用的函数是 load_manysave_many

>>> dfr.save_many(dict(raw_data=raw_data, processed_data=processed_data), "example.xlsx") # doctest: +SKIP
>>> dfdict = dfr.load_many("example.xlsx") # doctest: +SKIP

其中输入和输出都是字典,允许您将多个数据帧组合成单个Excel文件。

安装

只需使用以下命令进行安装

pip install dataframing

项目详情


下载文件

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

源分布

dataframing-0.1rc2.tar.gz (12.9 kB 查看哈希)

上传时间

构建分布

dataframing-0.1rc2-py3-none-any.whl (9.7 kB 查看哈希)

上传时间 Python 3

由以下机构支持