Транспонирование внутри Polars df приводит к «TypeError: еще не реализовано: вложенные типы объектов»Python

Программы на Python
Anonymous
 Транспонирование внутри Polars df приводит к «TypeError: еще не реализовано: вложенные типы объектов»

Сообщение Anonymous »

У меня есть эти данные:

Код: Выделить всё

┌────────────┬─────────────────────────────────────┐
│ col1       ┆ col2                                │
│ ---        ┆ ---                                 │
│ list[str]  ┆ list[list[str]]                     │
╞════════════╪═════════════════════════════════════╡
│ ["a"]      ┆ [["a"]]                             │
│ ["b", "c"] ┆ [["b", "c"], ["b", "c"], ["b", "c"] │
│ ["d"]      ┆ [["d"]]                             │
└────────────┴─────────────────────────────────────┘
Я хочу, чтобы все b и все c были в одном списке в строке 2, но, как вы можете видеть, ассоциации b с b и c с c не поддерживаются в строке 2. С пандами я использовал:

Код: Выделить всё

import pandas as pd

pddf = pd.DataFrame({"col1": [["a"], ["b", "c"], ["d"]],
"col2": [[["a"]], [["b", "c"], ["b", "c"], ["b", "c"]], [["d"]]]})

pddf["col2"] = pddf["col2"].apply(lambda listed: pd.DataFrame(listed).transpose().values.tolist())

print(pddf)

#      col1                    col2
# 0     [a]                   [[a]]
# 1  [b, c]  [[b, b, b], [c, c, c]]
# 2     [d]                   [[d]]
Это желаемый результат. Я пытаюсь сделать то же самое с полярами, заменив pddf.transpose().values.tolist() на pldf.transpose().to_numpy().tolist(), но всегда получаю сообщение TypeError: еще не реализовано: вложенные типы объектов. Есть ли обходные пути? Вот полный код поляры:

Код: Выделить всё

import polars as pl

pldf = pl.DataFrame({"col1": [["a"], ["b", "c"], ["d"]],
"col2": [[["a"]], [["b", "c"], ["b", "c"], ["b", "c"]], [["d"]]]})

pldf = pldf.with_columns(pl.col("col2").map_elements(lambda listed: pl.DataFrame(listed).transpose().to_numpy().tolist()))

print(pldf)

# TypeError: not yet implemented: Nested object types
# Hint: Try setting `strict=False` to allow passing data with mixed types.
Где мне нужно применить упомянутый strict=False?
В более простом df pddf.transpose().values.tolist() и pldf.transpose().to_numpy().tolist() одинаковы:

Код: Выделить всё

import pandas as pd
import polars as pl

pd.DataFrame(
{"col1": ["a", "b", "c"],
"col2": ["d", "e", "f"]}
).transpose().values.tolist() == pl.DataFrame(
{"col1": ["a", "b", "c"],
"col2": ["d", "e", "f"]}
).transpose().to_numpy().tolist()

# True
Пожалуйста, держитесь как можно ближе к коду, хотя использование .apply() или .map_elements() не идеально, но это в гораздо большем проекте, и я не хочу ничего больше ломать :).
(РЕДАКТИРОВАНИЕ: я немного упростил код, поскольку вторая лямбда не была действительно необходима для вопроса.)

Подробнее здесь: https://stackoverflow.com/questions/791 ... d-nested-o

Вернуться в «Python»