Каков самый быстрый способ создания/создания экземпляра кадра данных Python Polars из функции, которая возвращает несколPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Каков самый быстрый способ создания/создания экземпляра кадра данных Python Polars из функции, которая возвращает нескол

Сообщение Anonymous »

У меня есть функция, которая вызывает цикл, генерирующий новые строки данных, по 4 за раз. Я пытаюсь как можно быстрее превратить все сгенерированные строки в фрейм данных Polars.
Мой текущий код создает список строк (кортежей) для DataFrame и расширяет его с помощью каждая партия новых строк. Затем он создает экземпляр Polars DataFrame из списка кортежей.
Текущий код
rows = []

def make_df(x):
for data in x: # This loops ~500k times
new_rows = process(data) # 4 new rows created
# new_rows is a tuple of length 4
# Each element (row) of the tuple is another tuple of length 10
rows.extend(new_rows)

return pl.DataFrame(rows, orient='row') # This line is very slow (4-5 sec)

Для моего DataFrame (около 2 миллионов строк, 10 столбцов) создание экземпляра DF занимает примерно 4–5 секунд. Это кажется медленным, и мне интересно, есть ли более быстрый способ сделать это. Я пробовал использовать генератор (пример ниже), но, кажется, это занимает столько же времени, возможно, даже немного медленнее.
Генератор (не работает быстрее)
def g(x):
for data in x: # This loops ~500k times
new_rows = process(data) # 4 new rows created
# new_rows is a tuple of length 4
# Each element of the tuple is another tuple of length 10
yield new_rows[0]
yield new_rows[1]
yield new_rows[2]
yield new_rows[3]

def make_df(x):
return pl.DataFrame(g(x), orient='row') # Slows down the loop by 5-6 seconds

Есть более быстрый способ сделать это? Пример ниже: < /p>
import polars as pl
import datetime
date = datetime.datetime(2024, 7, 14, 12, 30)
rows = []

def make_df():
for data in range(500000): # This loops ~500k times
new_row = (1, date, 3, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, date)
new_rows = ((new_row),) * 4 # 4 new rows created
# new_rows is a tuple of length 4
# Each element (row) of the tuple is another tuple of length 10
rows.extend(new_rows)

return pl.DataFrame(
rows,
orient='row',
schema={
'a': pl.Int64,
'b': pl.Datetime,
'c': pl.Int64,
'd': pl.Float64,
'e': pl.Float64,
'f': pl.Float64,
'g': pl.Float64,
'h': pl.Float64,
'i': pl.Float64,
'j': pl.Datetime,
},
) # This line is very slow (4-5 sec)

make_df()


Подробнее здесь: https://stackoverflow.com/questions/793 ... -from-a-fu
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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