我正在写一个返回Pandas DataFrame
对象的函数。我希望有某种类型的提示这个DataFrame
包含哪些列,而不仅仅是文档中的规范,因为我觉得这将使最终用户更容易阅读数据。
在编辑Python文件和编辑Jupyter Notebooks时,是否有一种方法可以输入不同工具(如Visual Studio Code和PyCharm)支持的提示DataFrame
内容?
示例函数:
def generate_data(bunch, of, inputs) -> pd.DataFrame:
"""Massages the input to a nice and easy DataFrame.
:return:
DataFrame with columns a(int), b(float), c(string), d(us dollars as float)
"""
4条答案
按热度按时间olqngx591#
据我所知,仅仅使用核心Python和pandas是无法做到这一点的。
我推荐使用pandera,它有更广泛的作用域,但是类型检查dataframe列类型是它的功能之一。
pandera也可以使用in conjunction和pydantic,而VS Code (via Pylance)和Pycharm插件也可以使用。
rekjcdws2#
到目前为止(2023年4月),pandas
DataFrame
的强类型最强大的项目是pandera。不幸的是,它提供的功能非常有限,远远不是我们想要的。下面是一个如何在您的案例中使用
pandera
的示例†:你可以看到
mypy
在最后一行产生了静态类型检查错误:优点和局限性讨论
有了潘德拉我们就有了-
1.清晰易读的
dataclass
模式定义,并能够将其用作类型提示。1.运行时模式验证。模式可以定义比类型更多的约束(参见下面示例中的
year
和pandera
文档了解更多)。我们仍然怀念的是-
1.用于列级验证的完全静态类型检查。
1.任何IDE对列名自动完成的支持。
1.对于模式声明的内联语法,我们必须在使用它之前显式地将每个模式定义为单独的类。
更多示例
Pandera文档-https://pandera.readthedocs.io/en/stable/dataframe_models.html
类似问题-Type hints for a pandas DataFrame with mixed dtypes
其他打字项目
pandas-stubs是一个活跃的项目,为pandas公共API提供类型声明,比pandas本身包含的类型存根更丰富。但它不提供任何列级模式的工具。
有相当多的过时的库与此相关,pandas一般都是输入-dataenforce,data-science-types,python-type-stubs
†
pandera
提供了两种不同的API,它们看起来同样强大-基于对象的API和基于类的API。我在这里演示了后者。j91ykkif3#
阿恩是对的,Python的类型提示没有任何原生的开箱即用的支持来指定Pandas DataFrame中的col类型。
您也许可以将注解与自定义类型一起使用
这是一个可以采用的示例方法。它定义了一个名为MyDataFrame的自定义NamedTuple。当然,它并不是严格地对DataFrame进行类型提示,IDE和类型检查工具也不会强制执行它,但它向用户提供了一个关于输出DataFrame的预期结构体的提示。
您可以采用的另一种方法是使用自定义类型别名和docstring
在这里,您可以为pd.DataFrame定义一个自定义类型别名来表示expectec输出DataFrame,这对最终用户很有帮助
gudnpqoy4#
我不确定是否完全理解您的期望。难道
df.info()
不足以帮助用户吗?如果没有,你可以子类化
DataFrame
并覆盖像info
和__repr__
这样的方法。你可以在attrs
字典中存储额外的信息并在这些方法中使用它。下面是一个例子:使用方法:
我只是使用了一个简单的字符串,但你可以有一个更复杂的
attrs
结构和一个特殊的函数来显示这个dict(检查列是否存在,避免显示无用的信息)。