【问题标题】:Static typing/schema of a pandas dataframe熊猫数据框的静态类型/模式
【发布时间】:2019-04-21 21:42:19
【问题描述】:

有没有办法“静态地”提示 pandas 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,它返回带有预先知道的列的数据——你如何让这个函数的用户透明?有什么比在函数的文档字符串中拼写更智能/更标准化的吗?

【问题讨论】:

标签: python pandas


【解决方案1】:

pandera 应该是你需要的。

为寻求正确性的科学家、工程师和分析师提供的数据验证库。

【讨论】:

  • 这正是我想要的。谢谢!
【解决方案2】:

这可能是您已经知道的,但获得自动完成功能的可靠方法是在Jupyter notebooks 中“实时”开发代码。它在数据科学应用程序中非常常用 - 对于您的实例,使用您在笔记本顶部查找的类型实例化 DataFrame 版本可能是合适的,然后 Jupyter 将为列和类型提供自动完成功能你编码。显然,它在知道范围内的内容方面比 IDE 有很大的优势,因为数据帧实际上是在您开发时加载到内存中的。

根据 above_c_level 的评论,dataenforce 与 pytest 的连接看起来很有希望(即在开发代码后进行测试),但除非与您的 IDE 有一些花哨的集成,否则我认为它无法匹配Jupyter 对对象的“实时知识”。

【讨论】:

  • 不是问题的直接答案,但有见地!谢谢@DaveB
  • 这适用于脚本和原型设计,但不适用于开发生产级代码。
猜你喜欢
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多