[PYTHON] Avertissement de tri dans la fonction pd.concat

Si vous voulez joindre verticalement, mettez le tri, et pour l'instant, triez les colonnes pour le moment.

En conclusion, si vous souhaitez pd.concat verticalement deux blocs de données avec des colonnes différentes ou un ordre de colonne différent, vous devez entrer sort = True ou sort = False. Sinon, l'avertissement suivant sera émis.

pd.concat([df_1, df_2])

=============================================
FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

  = pd.concat([df_1, df_2])

Exemple pratique: lorsque seul l'ordre des colonnes est différent

Qu'est-ce qui ne va pas après tout? Au début, je n'ai pas eu beaucoup d'images, alors j'aimerais donner un exemple concret simple ici. Préparez deux trames de données, df_1 et df_2.

df_1 = pd.DataFrame({"b": ["kiwi", "avocado", "durian"],
                     "a": ["NY", "CA", "Seattle"]
                    })
df_2 = pd.DataFrame({"a": ["Tokyo", "Osaka", "Sapporo"],
                     "b": ["apple", "banana", "orange"]
                    })

df_1:

b a
0 kiwi NY
1 avocado CA
2 durian Seattle

df_2:

a b
0 Tokyo apple
1 Osaka banana
2 Sapporo orange

df_1 est de l'ordre de b et a, et df_2 est de l'ordre de a et b.

Concat avec sort = False comme argument

Passons-le d'abord avec sort = False.

concat_false = pd.concat([df_1, df_2], sort=False)

concat_false:

b a
0 kiwi NY
1 avocado CA
2 durian Seattle
0 apple Tokyo
1 banana Osaka
2 orange Sapporo

Identique à df_1, aligné avec les colonnes b et a.

Concat avec sort = True (identique à concat sans argument de tri)

Si sort = True est défini ici, ce sera comme suit.

concated_true = pd.concat([df_1, df_2], sort=True)

concated_true:

a b
0 NY kiwi
1 CA avocado
2 Seattle durian
0 Tokyo apple
1 Osaka banana
2 Sapporo orange

Dans ce cas, l'ordre est les colonnes a et b. Si vous ne passez pas l'argument de tri, il supposera (pour l'instant) sort = True et se combinera. Au lieu de cela, un avertissement se produira.


concated = pd.concat([df_1, df_2])
#Concated et concated en utilisant la fonction égal_Vérifiez si vrai est le même
print(concated.equals(concated_true))
# True
=============================================
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/ipykernel_launcher.py:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

  """Entry point for launching an IPython kernel.

En utilisant la fonction equals, nous pouvons voir que les deux dfs, concated_true (sort = True) et concated (sans l'argument sort), sont égaux.

Exemple pratique: lorsque les colonnes sont différentes

C'est presque la même chose même si les colonnes sont différentes.

df_1 = pd.DataFrame({"a": ["Tokyo", "Osaka", "Sapporo"],
                     "b": ["apple", "banana", "orange"],
                     "c": [3, 2, 1],
                     "e": [2, 4, 8]})
df_2 = pd.DataFrame({"b": ["kiwi", "avocado", "durian"],
                     "c": [1, 3, 5],
                     "a": ["NY", "CA", "Seattle"],
                     "d": [2, 20, 1]})

df_1:

a b c e
0 Tokyo apple 3 2
1 Osaka banana 2 4
2 Sapporo orange 1 8

df_2:

b c a d
0 kiwi 1 NY 2
1 avocado 3 CA 20
2 durian 5 Seattle 1

Les colonnes communes sont les colonnes a, b et c. La différence est la colonne d et la colonne e.

Concat avec sort = False comme argument

concat_false = pd.concat([df_1, df_2], sort=False)
a b c e d
0 Tokyo apple 3 2.0 NaN
1 Osaka banana 2 4.0 NaN
2 Sapporo orange 1 8.0 NaN
0 NY kiwi 1 NaN 2.0
1 CA avocado 3 NaN 20.0
2 Seattle durian 5 NaN 1.0

En regardant les colonnes, elles ne sont pas classées par ordre alphabétique: a, b, c, e, d. C'est la colonne a, b, c, e de df_1 avec la colonne d de df_2 attachée par la droite.

Concat sans argument de tri (identique à concat avec sort = True)

Si vous concattez ces deux blocs de données sans tri, vous obtiendrez ce qui suit.

concat = pd.concat([df_1, df_2])

=============================================
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/ipykernel_launcher.py:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

  """Entry point for launching an IPython kernel.

concat:

a b c d e
0 Tokyo apple 3 NaN 2.0
1 Osaka banana 2 NaN 4.0
2 Sapporo orange 1 NaN 8.0
0 NY kiwi 1 2.0 NaN
1 CA avocado 3 20.0 NaN
2 Seattle durian 5 1.0 NaN

C'est dans l'ordre alphabétique comme a, b, c, d, e. Rien n'a changé concernant le contenu des données.

Cela a le même résultat que de faire sort = True.

concat_true = pd.concat([df_1, df_2], sort=True)
# concat_Vérifiez si true et concat sont identiques
concat_true.equals(concat)
# True

# concat_vrai et concat_Vérifiez si faux est le même
concat_false.equals(concat_true)
# False

concat_true:

a b c d e
0 Tokyo apple 3 NaN 2.0
1 Osaka banana 2 NaN 4.0
2 Sapporo orange 1 NaN 8.0
0 NY kiwi 1 2.0 NaN
1 CA avocado 3 20.0 NaN
2 Seattle durian 5 1.0 NaN

Enfin: si l'avertissement est bruyant, pourquoi ne pas trier = True pour le moment?

Cet avertissement de pandas concat ne fait pas de mal s'il est laissé sans surveillance, mais il brume. Sort = True peut être suffisant pour des raisons de lisibilité, car il n'a aucun effet sur les données elles-mêmes et seul l'ordre des colonnes compte.

Le débordement de la pile de référence est le suivant.

https://stackoverflow.com/questions/50501787/python-pandas-user-warning-sorting-because-non-concatenation-axis-is-not-aligne

Recommended Posts

Avertissement de tri dans la fonction pd.concat
Prenez la somme logique de List en Python (fonction zip)
Tri sélect écrit en C
Dualité en fonction
La fonction _authenticate_with_backend était obsolète dans django auth.autenticate
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Récupérer l'appelant d'une fonction en Python
[Neta] Fonction de tri de veille thread-safe en Python (threading)
Correction des arguments de la fonction utilisée dans map
J'ai essayé d'implémenter la fonction gamma inverse en python
Exécuter des fonctions en parallèle
Trier en Python. Pensons ensuite à l'algorithme.
Fonction générateur même en JavaScript
Tri à bulles en Python
La première «fonction» GOLD
À propos de la fonction Déplier
Tri personnalisé en Python3
Que signifie le dernier () dans une fonction en Python?
En Python, les éléments de la liste sont triés et sortis sous forme d'éléments et de multiples.
Avoir le graphique d'équation de la fonction linéaire dessiné en Python
Implémentation de l'algorithme de "Algorithm Picture Book" en Python3 (Bubble Sort)
Trier le tableau de chaînes par ordre de longueur et syllabaire japonais
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
Rendre la fonction de dessin de polices japonaises dans OpenCV en général
Implémentation de l'algorithme «Algorithm Picture Book» en Python3 (tri sélectif)
Covector pour penser en fonction
Concernant la fonction d'activation Gelu
Créer une fonction en Python
Utiliser la fonction de rappel en Python
Quelle est la fonction d'activation?
Trouver des erreurs en Python
Trier naturellement le chemin en Python
Fonction ntile (décile) en python
Implémenter la fonction de minuterie dans pygame
À propos de la fonction enumerate (python)
Tri décroissant avec mongodb en python
Méthodes disponibles dans la liste
Désactivez l'avertissement d'infusion
Modélisation de fonctions non linéaires en Python
Dessiner la fonction Yin en python
Fonction immédiate (lie) en python
Qu'est-ce que la fonction de rappel?
Trier par date en python
Essayez de transcrire la fonction de masse stochastique de la distribution binomiale en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
Trier les noms de fichiers obtenus par Python glob dans l'ordre numérique
Créez une fonction pour obtenir le contenu de la base de données dans Go
Comment utiliser la fonction de rendu définie dans .mako (.html) directement dans mako