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

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

Сообщение Anonymous »

У меня есть функция, которая вызывает цикл, который генерирует новые строки данных, 4 за раз. Я пытаюсь превратить все строки, сгенерированные в 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)
< /code>
Для моего DataFrame (около 2 миллионов строк, 10 столбцов), это занимает ~ 4-5 секунд, чтобы создать DF. Это кажется медленным, и мне интересно, есть ли более быстрый способ сделать это. Я пытался использовать генератор (пример ниже), но, похоже, он занимает столько же времени, может быть, даже немного медленнее. < /P>
[b] генератор (не работает быстрее) [/b] 
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
Есть ли более быстрый способ сделать это?
Обновить
Воспроизводимый пример ниже:

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

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()
Обновление 2
кажется, что это замедление связано с созданием экземпляров столбцов DateTime . Производительность в этом отношении была значительно улучшена, когда я обновил свой поляры с 1.17.1 до 1.20.0 .

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

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

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

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

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

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

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