Python式的Pandas暗示?

3qpi33ja  于 2022-12-28  发布在  Python
关注(0)|答案(6)|浏览(156)

让我们看一个简单的函数,它接受一个字符串并返回一个 Dataframe :

import pandas as pd
def csv_to_df(path):
    return pd.read_csv(path, skiprows=1, sep='\t', comment='#')

向此函数添加类型提示的推荐Python方法是什么?

如果我问python一个DataFrame的类型,它会返回pandas.core.frame.DataFrame

def csv_to_df(path: str) -> pandas.core.frame.DataFrame:
     return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
3j86kqsm

3j86kqsm1#

为什么不直接使用pd.DataFrame呢?

import pandas as pd
def csv_to_df(path: str) -> pd.DataFrame:
    return pd.read_csv(path, skiprows=1, sep='\t', comment='#')

结果是一样的:

> help(csv_to_df)
Help on function csv_to_df in module __main__:
csv_to_df(path:str) -> pandas.core.frame.DataFrame
ckocjqey

ckocjqey2#

我目前正在执行以下操作:

from typing import TypeVar
PandasDataFrame = TypeVar('pandas.core.frame.DataFrame')
def csv_to_df(path: str) -> PandasDataFrame:
    return pd.read_csv(path, skiprows=1, sep='\t', comment='#')

其中:

> help(csv_to_df)
Help on function csv_to_df in module __main__:

csv_to_df(path:str) -> ~pandas.core.frame.DataFrame

我不知道这有多深奥,但我发现作为一个类型提示,它是可以理解的。

czq61nw1

czq61nw13#

现在有一个pip包可以帮助解决这个问题。https://github.com/CedricFR/dataenforce
你可以用pip install dataenforce安装它,并使用非常Python类型的提示,比如:

def preprocess(dataset: Dataset["id", "name", "location"]) -> Dataset["location", "count"]:
    pass
vddsk6oq

vddsk6oq4#

查看here给出的答案,其中解释了包data-science-types的用法。

pip install data-science-types

演示

# program.py

import pandas as pd

df: pd.DataFrame = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]}) # OK
df1: pd.DataFrame = pd.Series([1,2,3]) # error: Incompatible types in assignment

使用mypy以相同的方式运行:
$ mypy program.py

ohtdti5x

ohtdti5x5#

这偏离了最初的问题,但基于@dangom使用TypeVar的回答和@Georgy的注解(无法在类型提示中指定DataFrame列的数据类型),您可以使用类似下面的简单解决方案来指定DataFrame中的数据类型:

from typing import TypeVar
DataFrameStr = TypeVar("pandas.core.frame.DataFrame(str)")
def csv_to_df(path: str) -> DataFrameStr:
    return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
dly7yett

dly7yett6#

看一下pandera
pandera提供了一个灵活的表达性API,用于对类似 Dataframe 的对象执行数据验证,以使数据处理管道更具可读性和鲁棒性。 Dataframe 包含pandera在运行时显式验证的信息。这在生产关键型或可复制的研究设置中非常有用。

相关问题