最近开始使用Pandera;多么优秀的Python包!
有人知道是否可以将所谓的列元数据包含到数据帧的SchemaModel中吗?例如,添加一列的单位(秒、公里等(
考虑以下情况。我有两个Panda数据帧(比如df1和df2(,每个数据帧都有一列距离。现在假设我通过一些键将这两个数据帧合并到一个名为df_merged的新数据帧中,然后取两个距离列的和。在验证生成的数据帧时,最好验证两个距离单位是否相等(例如,两个km,或两个cm(。
我想这意味着df1和df2的输入模式将包括某种距离列的元数据,Pandera将检查这些单位是否兼容。
Pandera有可能做到这一点吗?还是我需要以不同的方式来实现这一点?
您没有给出示例数据,所以我假设元数据只是模式中的另一列。如果您只想检查数据帧是否有效,那么直接使用现有的Check
接口:
import pandera as pa
from pandera.typing import Series
from pandera import extensions
import pandas as pd
@extensions.register_check_method(supported_types=pd.Series)
def uniform(series: pd.Series):
uniques = series.unique()
if len(uniques) != 1:
return pd.Series([False] * len(series))
class Schema(pa.SchemaModel):
distance: Series[float]
unit: Series[str] = pa.Field(uniform=())
示例:
>>> Schema.validate(pd.DataFrame({
... "distance": [1212., 3431., 4.],
... "unit": ["m", "m", "km"],
... }))
Traceback (most recent call last):
[...]
raise errors.SchemaError(
pandera.errors.SchemaError: <Schema Column(name=unit, type=DataType(str))> failed element-wise validator 0:
<Check uniform>
failure cases:
index failure_case
0 0 m
1 1 m
2 2 km
如果你还想在pandra中处理随后的转换(例如"找到最频繁的单元并尝试将所有其他行转换为它"(,那你就太倒霉了。它已经被多次提出,很有可能得到实施,但它还没有实现。