这个 python 函数签名在 Kedro 教程中意味着什么?

What does this python function signature means in Kedro Tutorial?

我正在研究 Kedro 库,因为我的团队正在考虑将它用于我们的数据管道。

正在转到官方教程 - Spaceflight。

我遇到了这个函数:

def preprocess_companies(companies: pd.DataFrame) -> pd.DataFrame:
"""Preprocess the data for companies.

    Args:
        companies: Source data.
    Returns:
        Preprocessed data.

"""

companies["iata_approved"] = companies["iata_approved"].apply(_is_true)

companies["company_rating"] = companies["company_rating"].apply(_parse_percentage)

return companies

查看函数,我的假设是 (companies: pd.Dafarame) 是 shorthand 将“公司”数据集读取为数据框。如果是这样,我不明白最后的-> pd.Dataframe是什么意思

我试着查看 python 有关此类代码风格的文档,但没有找到任何内容

非常感谢帮助我理解这一点。

谢谢

-> 符号是 type hintingcompanies: pd.DataFrame 函数定义中的 : 部分也是如此。这在 Python 中不是必需的,但很多人喜欢包含它。如果函数定义不包含 this 而是读取:

,则函数定义将完全相同
def preprocess_companies(companies):

这是一般性的 Python 事情,而不是 kedro 特有的事情。

kedro 将 companies 注册为 kedro 数据集的方式完全独立于此函数定义,并通过 catalog.yml 文件完成:

companies:
  type: pandas.CSVDataSet
  filepath: data/01_raw/companies.csv

然后将定义一个 node(在 pipeline.py 中)以指定 preprocess_companies 函数应将 kedro 数据集 companies:

node(
    func=preprocess_companies,
    inputs="companies",  # THIS LINE REFERS TO THE DATASET NAME
    outputs="preprocessed_companies",
    name="preprocessing_companies",
),

理论上函数本身的参数名称可以完全不同,例如

def preprocess_companies(anything_you_want):

...虽然给它起与数据集相同的名称是很常见的。

在这种情况下,公司在技术上是任何 DataFrame。但是,当包裹在 Kedro Node 对象中时,将传入正确的数据集:

Node( 
   func=preprocess_companies, # The function posted above
   inputs='raw_companies', # Kedro will read from a catalog entry called 'raw companies'
   outputs='processed_companies', # Kedro will write to a catalog entry called 'processed_companies'
)

本质上参数名称在这里并不重要,它被这样命名是为了让阅读代码的人知道它在语义上是关于公司的,但是函数名也是如此。

以上是技术上的简化,因为我没有进入 MemoryDataSets 但希望它涵盖了要点。

这是声明输入类型的方式(公司:pd.DataFrame)。这里 companies 是参数, pd.DataFrame 是它的类型。以同样的方式 -> pd.DataFrame 这是输出类型 总的来说,他们说 pd.DataFrame 类型的公司将 return pd.DataFrame 类型变量。 我希望你明白了