при работе с двоичными данными я использую специальную функцию для их декодирования. Это требует использования apply в полярах. Из-за поэлементной обработки в этом случае время расчета значительно увеличивается при работе с большими наборами данных.
Я пытался привести двоичные данные к List(UInt8), но это еще не реализовано.
exceptions.ArrowErrorException: NotYetImplemented("Casting from LargeBinary to LargeList(Field { name: \"item\", data_type: UInt8, is_nullable: true, metadata: {} }) not supported")
Есть ли более эффективный способ сделать это?
import polars as pl
import struct
import io
data = {"binary": [b'\xFD\x00\xFE\x00\xFF\x00',b'\x10\x00\x20\x00\x30\x00'], "id": [1,2]}
schema = {"binary": pl.Binary, "id":pl.Int16}
df = pl.DataFrame(data, schema)
Это возвращает:
shape: (2, 2)
┌───────────────┬─────┐
│ binary ┆ id │
│ --- ┆ --- │
│ binary ┆ i16 │
╞═══════════════╪═════╡
│ [binary data] ┆ 1 │
│ [binary data] ┆ 2 │
└───────────────┴─────┘
Теперь, когда мы применим нашу функцию для декодирования двоичного столбца:
def custom_decode(data):
bytestream = io.BytesIO(data)
lst = []
while bytestream.tell() < 6:
lst.append(struct.unpack('
Подробнее здесь: https://stackoverflow.com/questions/763 ... -in-polars