【发布时间】: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,它返回带有预先知道的列的数据——你如何让这个函数的用户透明?有什么比在函数的文档字符串中拼写更智能/更标准化的吗?
【问题讨论】:
-
所以你想根据数据类型选择列?
-
不,我要静态注释列的类型
-
mypy 中似乎有一些相关的 wip:github.com/pandas-dev/pandas/issues/26792 也可以在 stackoverflow.com/questions/46412821/… 中看到某种解决方法
-
与此相关,有没有办法输入mypy会理解的单个Series?
pd.Series[str]、pd.Series[int]之类的东西 -
dataenforce 包装 DataFrame 以允许您描述的类型提示。