Warum ist die Anwendungsfunktion der Panda so langsam, wenn sie über eine ganze Zeile iteriert, und nicht eine bestimmtePython

Python-Programme
Anonymous
 Warum ist die Anwendungsfunktion der Panda so langsam, wenn sie über eine ganze Zeile iteriert, und nicht eine bestimmte

Post by Anonymous »

Meine Intuition bei der Verwendung von Pandas ist, dass es optimaler ist, alle Antragsvorgänge in einem Anruf zu gruppieren, wenn Sie df.apply verwenden müssen. Dies wurde weiter verstärkt, indem ich erfuhr, dass Numpy Daten in einer Reihe von Zeilen und Major speichert, und damit das Aufrufen von Anwenden über eine ganze Zeile von der räumlichen Zeitlichkeit profitieren würde. Nach meiner Erfahrung ist es jedoch deutlich langsamer, anwenden in einer Funktion zu kombinieren, und es ist optimaler, in jeder Spalte die Anwendung separat aufzurufen. Erhöhen Sie. < /p>

Code: Select all

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")
Ich erkenne natürlich, dass die Operationen im obigen Snippet nicht anwenden . Aber der Punkt bleibt und ich stelle mir vor, dass String -Operationen noch signifikantere Leistungsunterschiede sehen.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post