Как добавить префикс к именам столбцов при отмене вложения в Polars?Python

Программы на Python
Ответить
Anonymous
 Как добавить префикс к именам столбцов при отмене вложения в Polars?

Сообщение Anonymous »

В кадре данных Polars я делаю несколько вызовов сложной функции, которая возвращает словарь для различных настроек, который затем распаковывается в кадр данных.
Я хотел бы добавить префикс к именам вложенных столбцов, чтобы они не создавали повторяющиеся столбцы.
Вот пример кода Python

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

import datetime
import random
import polars   as pl

df = pl.DataFrame({
'datetime_local': pl.Series(
datetime.datetime(2001, 1, 1, 1, 1, 1, 0) + datetime.timedelta(milliseconds=20 * i) for i in range(500)
),
'value1': pl.Series(random.random() for _ in range(500)),
'value2': pl.Series(random.random() for _ in range(500))
})

def my_complex_function(param_a:float, param_b:float, param_c:float, param_d:float):
""" takes n parameters perform complex calculations and return a dictionary"""
output_1 = param_a + param_b + param_c + param_d # you have to imagine that there are some complex calculations here
output_2 = param_a * param_b * param_c * param_d
output_3 = param_a / param_b / param_c / param_d
return {"output_1": output_1, "output_2": output_2, "output_3": output_3}

setup_A_param_c_value = 1.0
setup_A_param_d_value = 2.0

setup_B_param_c_value = 3.0
setup_B_param_d_value = 4.0

# Etc...

df = df.with_columns(pl.struct('value1', 'value2').map_elements(lambda x: \
my_complex_function(param_a=x['value1'     ], param_b=x['value2'], \
param_c=setup_A_param_c_value, param_d=setup_A_param_d_value, \
) ).alias('setup_A_results')).unnest('setup_A_results')

# This errors
df = df.with_columns(pl.struct('value1', 'value2').map_elements(lambda x: \
my_complex_function(param_a=x['value1'     ], param_b=x['value2'], \
param_c=setup_B_param_c_value, param_d=setup_B_param_d_value, \
) ).alias('setup_B_results')).unnest('setup_B_results')
Там второй вызов функции, конечно, вызовет повторяющуюся ошибку.

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

# DuplicateError: could not create a new DataFrame: column with name 'output_1' has more than one occurrence
Я нашел грязное решение, заключающееся в передаче префикса в мою функцию, но это не совсем чистый способ сделать это.
Должен быть способ поставить перед именами вложенных столбцов строку.


Подробнее здесь: https://stackoverflow.com/questions/765 ... -in-polars
Ответить

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

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

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

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

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