У меня есть функция, которая вызывает цикл, который генерирует новые строки данных, 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 .
У меня есть функция, которая вызывает цикл, который генерирует новые строки данных, 4 за раз. Я пытаюсь превратить все строки, сгенерированные в DataFrame Polars как можно быстрее. Каждая партия новых рядов. Затем он экземпляет поляр DataFrame из списка кортежей. [b] текущий код [/b] [code]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 [/code] Есть ли более быстрый способ сделать это? [b]Обновить[/b] Воспроизводимый пример ниже: [code]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() [/code] [b] Обновление 2 [/b] кажется, что это замедление связано с созданием экземпляров столбцов DateTime . Производительность в этом отношении была значительно улучшена, когда я обновил свой поляры с 1.17.1 до 1.20.0 .
У меня есть функция, которая вызывает цикл, который генерирует новые строки данных, 4 за раз. Я пытаюсь превратить все строки, сгенерированные в DataFrame Polars как можно быстрее. Каждая партия новых рядов. Затем он экземпляет поляр DataFrame из...
У меня есть функция, которая вызывает цикл, генерирующий новые строки данных, по 4 за раз. Я пытаюсь как можно быстрее превратить все сгенерированные строки в фрейм данных Polars.
Мой текущий код создает список строк (кортежей) для DataFrame и...
A : содержит уникальные (A1, A2) пары и столбец d с числовыми значениями.
B : содержит (a1, a2) пары, но позволяет дубликаты. > от до b на основе ключей (A1, A2) .
В настоящее время я использую следующий подход...
A : содержит уникальные (A1, A2) пары и столбец d с числовыми значениями.
B : содержит (a1, a2) пары, но позволяет дубликаты. > от до b на основе ключей (A1, A2) .
В настоящее время я использую следующий подход...
Я работаю над собственной страницей в Filament PHP под названием AboutUs. Страница позволяет пользователям выбирать несколько элементов мультимедиа с помощью компонента CuratorPicker из пакета Awcodes\Curator. Мне нужно сохранить заголовок и...