0

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

虽然去官方教程 - 太空飞行。

我遇到了这个功能:

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
  • 公司是包含数据的 csv 文件的名称

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

我尝试查看有关这种代码风格的 python 文档,但我没有找到任何

感谢很多帮助,以帮助我理解这一点。

谢谢

4

3 回答 3

1

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

于 2021-05-10T09:41:31.343 回答
0

->符号是类型提示,函数定义中的:部分也是如此。companies: 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

然后将定义一个节点(在 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):

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

于 2021-02-11T17:01:08.173 回答
0

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

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,但希望它涵盖了要点。

于 2021-02-11T17:02:37.913 回答