Почему Panda применяет функцию настолько медленной, когда итерация по всей строке, а не в определенном столбце?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему Panda применяет функцию настолько медленной, когда итерация по всей строке, а не в определенном столбце?

Сообщение Anonymous »

Моя интуиция при использовании Pandas заключается в том, что, если вам нужно использовать df.apply , было бы более оптимально группировать все операции Apply в один вызов. Это было дополнительно подкреплено тем, что я узнал, что Numpy сохраняет данные в форме строк мажор, и, таким образом, призыв Apply по всей строке выиграет от пространственной временности. Тем не менее, по моему опыту, значительно более медленнее объединить применение в одну функцию, и более оптимально вызывать применение отдельно на каждом столбце.
Ниже код на моей машине занимает 0,0383 секунд, когда применить -ин увеличить. < /p>

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

import pandas as pd
import numpy as np
import time

df = pd.DataFrame(
data = np.random.randint(0, 100, size=(1000, 5)).astype(float),
columns = [f'col{i}' for i in range(1, 6)]
)

def apply_row(row):
row['col1'] = row['col1'] * 2 + 3
row['col2'] = row['col2'] + 5
row['col3'] = row['col3'] - 1
row['col4'] = row['col4'] / 2
row['col5'] = row['col5'] ** 2
return row

start = time.time()
df.apply(apply_row, axis=1)
end = time.time()
print(f"Row-based time: {end - start} seconds")

start = time.time()
df['col1'] = df['col1'].apply(lambda x: x* 2 + 3)
df['col2'] = df['col2'].apply(lambda x: x + 5)
df['col3'] = df['col3'].apply(lambda x: x - 1)
df['col4'] = df['col4'].apply(lambda x: x / 2)
df['col5'] = df['col5'].apply(lambda x: x ** 2)
end = time.time()
print(f"Column-based time: {end - start} seconds")
Я понимаю, конечно, операции в приведенном выше фрагменте не требуют применения . Но точка зрения остается, и, я полагаю, что строковые операции видят еще более значительные различия в производительности.
Для справки это с Python 3.13.5, Pandas 2.3.1, Numpy 2.3.2.

Подробнее здесь: https://stackoverflow.com/questions/797 ... re-row-rat
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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