Я знаю, что могу создать «скалярную» структуру Polars, косвенно используя словари в качестве элементов при построении серии. Но есть ли способ напрямую создать скаляр структуры Polars? (Не в серии или кадре данных.)
По непонятным мне причинам люди думают, что этот вопрос может быть похож на Способы непосредственного создания `pyarrow.StructScalar`?.
Это не так, потому что:
@jqurious Хм. Я думаю, этого может быть достаточно. Надеюсь, я смогу использовать список таких выражений для создания серии. Дайте-ка подумать.
@jqurious Кажется, я застреваю на самых простых вещах. Правильно ли я понимаю, что из списка выражений нельзя построить ряд? например pl.Series([pl.struct(hello=4, world = "zero"), pl.struct(hello=0, world = "2024 Jan")], dtype=pl.Struct({"hello": pl.Int16(), "world": pl.String()}))
. Я думаю, потому что выражения предназначены для создания серий в контексте кадра данных?
Вы правы: выражения предназначены не для такого использования. В этом случае вы бы просто использовали обычно dict(hello=0, world = "2024 Jan")
, как вы упомянули.
Технически вы можете делать такие вещи, как: pl.select(pl.concat([pl.struct(hello=4, world=pl.lit("zero")), pl.struct(hello=0, world=pl.lit("2024 Jan"))]))
Этот вопрос похож на: Способы непосредственного создания `pyarrow.StructScalar`?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.
@folengateis Нет, это совсем другое. Обратите внимание, что на этот вопрос есть ответ, а на этот вопрос еще нет ответа. Хотя Polars использует стрелки под капотом, он позволяет преобразовывать только массивы стрелок в серии Polars, а таблицы стрелок - в DataFrames Polars.
@folengateis Неправильное использование моего времени, но я обновил этот вопрос, чтобы объяснить, чем он отличается от другого вопроса.
Что вы подразумеваете под скаляром полярной структуры напрямую? AFAIK, полярные типы данных существуют только внутри серии или кадра данных. Если вы получите какой-либо конкретный элемент кадра/серии данных Polars, это будет «стандартный» тип Python. В частности, структура вне серии или фрейма данных — это просто словарь.
AFAIK, это невозможно. Типы данных Polars используются для ввода содержимого кадров и серий данных Polars. Вы не можете иметь данные типа Polars за пределами имени данных и серии. В частности, содержимое столбца struct
будет обычным словарем.
Рассмотрим следующий пример. Мы создаем фрейм данных Polars с одним столбцом struct
"my_structs"
(с полями "int_field"
и "float_field"
) и одной строкой данных.
import polars as pl
df = pl.DataFrame({
"my_structs": {"int": 1, "float": 1.0}
})
Теперь, если мы выберем столбец struct
и возьмем один хранящийся в нем элемент, результатом будет обычный словарь Python.
df.get_column("my_structs").item()
{'int_field': 1, 'float_field': 1.0}
Есть выражение
pl.struct
, например.foo = pl.struct(x=1, y=pl.lit('two'))
но не уверен, что это то, о чем вы просите.