[Python] Forces et faiblesses de DataFrame en termes de temps requis

Introduction En Python, pandas.DataFrame peut gérer des données de table à deux dimensions. Il est plus facile de gérer les données de table que list et tuple, qui sont équivalents à des tableaux dans d'autres langages, mais sa vitesse de traitement est fondamentalement plus rapide que list et tuple. Voyons les forces et les faiblesses d'un tel DataFrame tout en exécutant réellement le programme.

Environnement / conditions d'exécution Environnement d'exécution ・ Windows10 Famille 64 bits conditions -Données utilisées: données CSV de 10000 lignes ・ Colonne de données utilisée: index, ID étudiant, scores A-E 5 matières (0-10000) * Sur le modèle d'une liste de notes de 10000 étudiants qui ont passé un certain examen

Force du DataFrame La force de DataFrame est qu'il est facile à traiter et peut traiter les données à grande vitesse.

Lors du calcul de la valeur moyenne Ajoutez une colonne après pour implémenter le processus de substitution de la valeur moyenne. S'il s'agit d'une liste, le traitement suivant sera effectué.
for idx, row in enumerate(list):
	row.extend('0')
	row[7] = str((float(row[2]) + float(row[3]) + float(row[4]) + float(row[5]) + float(row[6]))/5.0)

Il est similaire par écrit à d'autres langues. C'est bien, mais ... Si vous l'implémentez avec DataFrame, vous n'avez besoin que d'une ligne ci-dessous.

df['average'] = (df['subjectA'] + df['subjectB'] + df['subjectC'] + df['subjectD'] + df['subjectE'])/5

Puisque vous pouvez écrire avec l'image d'une opération sur une ligne, il y a moins de risque d'erreurs de codage.

Lors du tri Lors du tri par ordre décroissant de la valeur moyenne ci-dessus, s'il s'agit d'une liste, le traitement suivant sera effectué.
list = sorted(list, key=lambda x: x[7], reverse=True)

En ce qui concerne le tri, la liste peut également être implémentée sur une seule ligne. Si vous implémentez cela avec un DataFrame, vous n'avez besoin que d'une seule ligne.

df.sort_values('average', ascending=False)
Lors de la réduction par conditions Si vous souhaitez affiner uniquement les données avec un score moyen de 50 points ou plus, le traitement suivant sera effectué pour la liste.
list2 = []
for idx, row in enumerate(list):
	if 50 <= float(row[7]):
		list2.append(row)

Utilisez la boucle for comme vous l'avez fait lors du calcul de la moyenne. Si vous implémentez cela dans un DataFrame ... vous pouvez vous attendre à ce qu'il soit sur une seule ligne.

df2 = df[50 < df['average']]
La vitesse de chaque processus est de ... La vitesse de chacun de ces processus est mesurée et moyennée 10 fois comme suit.
Nom du processus 10 fois le temps de trajet moyen(list)[sec] 10 fois le temps de trajet moyen(DataFrame)[sec]
Calcul moyen 0.764768385887146 0.01179955005645752
Trier 0.030899477005004884 0.011399650573730468
Rétrécir 0.04529948234558105 0.006699275970458984

Non seulement le code est simple à implémenter avec DataFrame, mais vous pouvez également voir qu'il est rapide.

Faiblesses du DataFrame La faiblesse de DataFrame est la boucle for. Si vous souhaitez créer la valeur moyenne dans une boucle for, utilisez le code ci-dessous.
for idx in range(len(df)):
	df.iat[idx, 6] = str((float(df.iat[idx, 1]) + float(df.iat[idx, 2])
		+ float(df.iat[idx, 3]) + float(df.iat[idx, 4]) + float(df.iat[idx, 5])/5.0))

Il faut en moyenne 2,33 [s] 10 fois, ce qui est plus lent que celui de la liste. Par conséquent, lorsqu'il s'agit de DataFrame, il est souhaitable de ne pas l'utiliser autant que possible.

Si vous voulez vraiment utiliser pour dans DataFrame Pourtant, il existe des situations où for est utilisé dans DataFrame. Dans un tel cas, vous pouvez accélérer le processus en ne faisant que la partie qui utilise pour dans la liste ou ndarray, ou en utilisant une méthode comme l'article ci-dessous. [[Python3 / pandas] Mesures d'amélioration de la vitesse lorsque vous voulez vraiment traiter DataFrame ligne par ligne](https://qiita.com/siruku6/items/0633db690283a0f525ad)

À propos de la création d'exemples de données Les exemples de données utilisés cette fois ont été créés avec le code à l'URL suivante. https://github.com/HagiAyato/PythonTests/blob/main/make10000data.py

Recommended Posts

[Python] Forces et faiblesses de DataFrame en termes de temps requis
Prise en compte des forces et faiblesses de Python
Différence entre Ruby et Python en termes de variables
Projet Euler # 1 "Multiple de 3 et 5" en Python
Explication de la distance d'édition et de l'implémentation en Python
Pour représenter la date, l'heure, l'heure et les secondes en Python
Fonctionnement de base de Python Pandas Series et Dataframe (1)
"Régression linéaire" et "Version probabiliste de la régression linéaire" en Python "Régression linéaire de Bayes"
Traitement pleine largeur et demi-largeur des données CSV en Python
Calcul de l'écart type et du coefficient de corrélation en Python
[Python] Mesure et affiche le temps nécessaire au traitement
[python] Calcul des mois et des années de différence de date / heure
Exemple d'obtention du nom du module et du nom de la classe en Python
Récapitulatif du traitement de la date en Python (datetime et dateutil)
Vérifiez le temps de traitement et le nombre d'appels pour chaque processus avec python (cProfile)
Jugement d'équivalence d'objet en Python
Ordre de référence des variables de classe et des variables d'instance dans "self. Variables de classe" en Python
[Python] Afficher le temps écoulé en heures, minutes et secondes (00:00:00)
Pile et file d'attente en Python
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
[Astuces] Problèmes et solutions dans le développement de python + kivy
Unittest et CI en Python
Implémentation du tri rapide en Python
Installation source et installation de Python
L'histoire du retour au front pour la première fois en 5 ans et de la refactorisation de Python Django
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
J'ai comparé le temps de calcul de la moyenne mobile écrite en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
Liste des solveurs et modélisateurs de conception linéaire (LP) disponibles en Python
Parcourir .loc et .iloc en même temps dans pandas DataFrame
Vérifier le taux de compression et le temps de PIXZ utilisé en pratique
Obtenez le titre et la date de livraison de Yahoo! News en Python
Construction d'environnement de python et opencv
Manipulation des pixels d'image en Python
L'histoire de Python et l'histoire de NaN
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
[Python] Mémo d'opération de pandas DataFrame
Différence entre list () et [] en Python
Différence entre == et est en python
Installer SciPy et matplotlib (Python)
Afficher les photos en Python et html
Algorithme de tri et implémentation en Python
Diviser timedelta dans la série Python 2.7
Manipuler des fichiers et des dossiers en Python
Échappement automatique des paramètres MySQL en python
À propos de Python et Cython dtype
Gestion des fichiers JSON en Python
Mesurer le temps d'exécution de la fonction en Python
Affectations et modifications des objets Python
Implémentation du jeu de vie en Python
Affichage de la forme d'onde audio en Python
Vérifiez et déplacez le répertoire en Python
Ceci et cela des propriétés python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Hashing de données en R et Python
Synthèse de fonctions et application en Python
Exporter et exporter des fichiers en Python