splor-mg / notas

Base de conhecimento
https://splor-mg.github.io/notas/main
0 stars 0 forks source link

Necessidade de `table_normalize` antes de aplicar transform steps #18

Open fjuniorr opened 1 year ago

fjuniorr commented 1 year ago

No pipeline do teste https://github.com/splor-mg/dpm/blob/116c4c2999b7f2513f01ed87666046456c38f9b6/tests/unit/test_issue_obz_dados2.py a gente poderia escrever

    pipeline = Pipeline(
        steps=[
            field_rename_to_target(),
            steps.row_filter(formula='uo_cod != "1251"'), # 1251 ainda é string
        ],
    )
    pipeline = Pipeline(
        steps=[
            field_rename_to_target(),
            steps.table_normalize(),
            steps.row_filter(formula='uo_cod != 1251'),
        ],
    )

Documentar esse comportamento bem como quais transformações são feitas entre "" e None com ou sem steps.table_normalize().

Não achei nada na documentação mas vi esse comentário que se aplica:

Hi,

there are two options.

You can cast the data in the function:

source = Resource(path="inp.csv")
target = transform(
source,
steps=[
    steps.field_add(name="Category", type='string', function=lambda rec: '<100' if int(rec['BTOT'])>100 else '1-100'),])

Or you can normalize everything beforehand (less effective on large data):

source = Resource(path="inp.csv")
target = transform(
source,
steps=[
    spets.table_normalize(),
    steps.field_add(name="Category", type='string', function=lambda rec: '<100' if rec['BTOT']>100 else '1-100'),])

Originally posted by @roll in https://github.com/frictionlessdata/frictionless-py/issues/772#issuecomment-806391474

labanca commented 1 year ago

TLDR: ler arquivo csv e ver com e sem table_normalize() como ele trata os valores None (vazio ou aspas vazias)