Обновить тип данных поля структуры с big_string на словарь.Python

Программы на Python
Ответить
Anonymous
 Обновить тип данных поля структуры с big_string на словарь.

Сообщение Anonymous »

Можно ли обновить тип поля внутри столбца структуры?
У меня определена явная схема pyarrow, которую я использовал для преобразования pandas в pyarrow, и я использую ее для оповещения о новых столбцах или для заполнения отсутствующих столбцов нулями. Я пытаюсь заменить панд полярами, но у меня возникают ошибки при преобразовании фрейма данных в таблицу pyarrow, чтобы привести типы данных в соответствие с моими историческими данными.
team_info = pa.struct(
[
("_id", pa.string()),
("name", pa.string()),
("status", pa.dictionary(index_type=pa.int32(), value_type=pa.string())),
]
)

schema = pa.schema(
[
("load_timestamp", pa.timestamp(unit="ns", tz="UTC")),
...
("team_info", team_info),
...

Polars ожидает, что тип данных для всех трех вложенных полей будет «large_string», когда я пытаюсь преобразовать фрейм данных в pa.Table с моей предопределенной схемой.
return df.to_arrow().cast(schema)

Я пытался создать подобную функцию, которая преобразует столбец статуса в категориальный, но, к сожалению, при этом поле добавляется в фрейм данных как новый столбец, вместо приведения вложенного поля на место.
def update_nested_status(df: pl.DataFrame, nested_columns: list[str]) -> pl.DataFrame:
"""Fixes data types in the agent_info and monitor_info columns"""
cols = [df[col].struct.field("status").cast(pl.Categorical) for col in nested_columns]
return df.with_columns(cols)

Изменить:
Это та функция, которую я получил. Кажется, пока это работает, и он приводит полярные типы dtypes к тому, что я явно определил в объектах схемы pyarrow. Он также меняет порядок столбцов в зависимости от того, как они упорядочены в схеме pyarrow.
def align_polars_schema(df: pl.DataFrame, schema: pa.Schema) -> pl.DataFrame:
"""
Aligns the schema of a polars dataframe to a pyarrow schema

Args:
df: polars DataFrame
schema: pyarrow Schema
"""
schema = pl.from_arrow(schema.empty_table()).schema
df = df.with_columns([pl.col(col).cast(dtype) for col, dtype in schema.items()])
return df.select([pl.col(col) for col in schema.keys()])


Подробнее здесь: https://stackoverflow.com/questions/758 ... dictionary
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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