У меня есть функция, которая вызывает цикл, генерирующий новые строки данных, по 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
Каков самый быстрый способ создания/создания экземпляра кадра данных Python Polars из функции, которая возвращает нескол ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение