Datenrahmen mit Listenelementen transponieren
Posted: 07 Jan 2025, 14:10
Ich habe einen Datenrahmen wie
Ich versuche einfach, eine Transponierung durchzuführen, sodass die Regeln Spalten und die aktuellen Spalten Zeilen sind.
Da die Polartransposition mit Listentypen scheinbar nicht funktioniert, versuche ich es um die Listen in durch Kommas getrennte Zeichenfolgen wie
umzuwandeln
aber ich bekomme immer wieder
Ein Beispiel aus der Antwort unten ist
Sowohl Transpose als auch Unpivot geben den Fehler.
Ich verwende die neuesten Polars
Wie kann ich meinen Datenrahmen transponieren?
Code: Select all
┌─────┬────────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
│ rul ┆ 647833 ┆ 64783 ┆ 64783 ┆ 64783 ┆ 64720 ┆ 64783 ┆ 64783 ┆ 64783 ┆ 64682 ┆ … ┆ 64681 ┆ 64681 ┆ 64681 ┆ 64719 ┆ 64681 ┆ 64681 ┆ 64682 ┆ 64682 ┆ 64682 ┆ 64682 │
│ e ┆ --- ┆ 0 ┆ 4 ┆ 1 ┆ 1 ┆ 2 ┆ 5 ┆ 6 ┆ 8 ┆ ┆ 7 ┆ 2 ┆ 3 ┆ 8 ┆ 5 ┆ 6 ┆ 1 ┆ 3 ┆ 2 ┆ 4 │
│ --- ┆ list[s ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ tr] ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ ┆ list[ │
│ ┆ ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] ┆ str] │
╞═════╪════════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════╡
│ cs_ ┆ ["Info ┆ ["Inf ┆ ["Inf ┆ ["Inf ┆ ["Cri ┆ ["Inf ┆ ["Inf ┆ ["Inf ┆ ["Inf ┆ … ┆ ["Inf ┆ ["Inf ┆ ["Inf ┆ ["Cri ┆ ["Inf ┆ ["Inf ┆ ["Inf ┆ ["Inf ┆ ["Inf ┆ ["Inf │
│ rul ┆ ", ┆ o", ┆ o", ┆ o", ┆ tical ┆ o", ┆ o", ┆ o", ┆ o", ┆ ┆ o", ┆ o", ┆ o", ┆ tical ┆ o", ┆ o", ┆ o", ┆ o", ┆ o", ┆ o", │
│ e_d ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] ┆ ", ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] ┆ ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] ┆ ", ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] ┆ "Ok"] │
│ ata ┆ ┆ ┆ ┆ ┆ "No ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ "No ┆ ┆ ┆ ┆ ┆ ┆ │
│ _ch ┆ ┆ ┆ ┆ ┆ data ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ data ┆ ┆ ┆ ┆ ┆ ┆ │
│ eck ┆ ┆ ┆ ┆ ┆ avail ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ avail ┆ ┆ ┆ ┆ ┆ ┆ │
│ ┆ ┆ ┆ ┆ ┆ iab… ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ iab… ┆ ┆ ┆ ┆ ┆ ┆ │
└─────┴────────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
Da die Polartransposition mit Listentypen scheinbar nicht funktioniert, versuche ich es um die Listen in durch Kommas getrennte Zeichenfolgen wie
umzuwandeln
Code: Select all
df = site_df.with_columns([pl.all().exclude("cs_rule_data_check").arr.join(",")])
Code: Select all
polars.exceptions.SchemaError: invalid series dtype: expected `FixedSizeList`, got `list[str]`
Code: Select all
df = pl.DataFrame({
"rule": "cs_rule_data_check",
"647833": [["Info","Ok"]],
"647201": [["Critical"]]
})
print(df)
#df = df.transpose(include_header=True, header_name="variable", column_names="rule")
df.unpivot(index="rule").pivot(on="rule", index="variable")
Code: Select all
pyo3_runtime.PanicException: called `Result::unwrap()` on an `Err` value: InvalidOperation(ErrString("cannot cast List type (inner: 'String', to: 'String')"))
Wie kann ich meinen Datenrahmen transponieren?