eu tenho o seguinte código
import polars as pl
mapping = {
'CASH': {'qty': 1, 'origin': 'E'},
'ITEM': {'qty': -9, 'origin': 'A'},
'CHECK': {'qty': 46, 'origin': 'A'},
}
df = pl.DataFrame([{'type': k} | v for k, v in mapping.items()])\
.with_columns(pl.struct(['qty', 'origin']).alias('mapping'))\
.select(pl.col(['type', 'mapping']))
Portanto, as chaves do dict devem se tornar uma nova coluna chamada type
e os valores do dict devem estar em sua própria mapping
coluna. Minha implementação acima funciona e df
se parece com isto:
shape: (3, 2)
┌───────┬───────────┐
│ type ┆ mapping │
│ --- ┆ --- │
│ str ┆ struct[2] │
╞═══════╪═══════════╡
│ CASH ┆ {1,"E"} │
│ ITEM ┆ {-9,"A"} │
│ CHECK ┆ {46,"A"} │
└───────┴───────────┘
Mas minha implementação é muito longa e não parece muito eficiente. Existe uma maneira polar mais idiomática de criar esse dataframe?
O construtor padrão
DataFrame
aceita dicionário. Basta especificar os nomes das colunas e usardict.keys()
edict.values()
como dados.Você pode criar as 2 colunas diretamente, conforme especificado: