是否有一种方法可以“静态”地提示熊猫DataFrame的架构,以便我们可以在编码过程中获得代码完成,静态类型检查以及一般的可预测性?
我不介意在代码中复制架构信息并键入注释以使其工作。.
所以大概像是mypy注释类型注释:
df = pd.DataFrame({'a': [1.0, 2.4, 4.5], 'B': [1,2,3]}) # pd.schema: ('a': np.dtype(float)), ('B': np.dtype(int))
(或者最好在某些外部JSON文件等中指定架构)
然后,您可以将诸如df.
自动完成在编码过程中成像到df.a
或df.B
上。或者mypy(以及任何其他静态代码分析器)能够推断出df.B[0]
的类型等等。
尽管很有希望,但我猜想这实际上是不可能的(或不希望的……)。如果是这样的话,编写返回具有特定列的pd.DataFrame
的可重用代码的良好标准是什么?因此,假设有一个函数get_data() -> pd.DataFrame
返回的数据具有预先已知的列-您如何使此函数对该函数的用户透明?除了将其在函数的文档字符串中说明以外,还有什么更聪明/更标准化的方法了?
答案 0 :(得分:1)
这可能是您已经知道的事情,但是获得您所追求的自动完成的可靠方法是在 Jupyter notebooks 中“实时”开发代码。它在数据科学应用程序中非常常用 - 对于您的实例,使用您在笔记本顶部查找的类型实例化 DataFrame 版本可能是合适的,然后 Jupyter 将为列和类型提供自动完成功能你编码。显然,在了解范围内的内容方面,它比 IDE 有很大优势,因为数据帧实际上是在您开发时加载到内存中的。
根据 above_c_level 的评论,dataenforce 与 pytest
的连接看起来很有希望(即在开发代码后进行测试),但除非与您的 IDE 有一些奇特的集成,否则我认为它不会能够匹配 Jupyter 对对象的“实时知识”。
答案 1 :(得分:0)
pandera 应该是您所需要的。
<块引用>为寻求正确性的科学家、工程师和分析师提供的数据验证库。