[PYTHON] Sortierwarnung in der Funktion pd.concat

Wenn Sie vertikal verbinden möchten, setzen Sie sort und sortieren Sie die Spalten vorerst.

Wenn Sie zwei Datenrahmen mit unterschiedlichen Spalten oder unterschiedlicher Spaltenreihenfolge vertikal pd.concat möchten, müssen Sie abschließend sort = True oder sort = False eingeben. Andernfalls wird die folgende Warnung ausgegeben.

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])

Praktisches Beispiel: Wenn nur die Spaltenreihenfolge unterschiedlich ist

Was ist denn los? Anfangs habe ich nicht viele Bilder bekommen, deshalb möchte ich hier ein einfaches konkretes Beispiel geben. Bereiten Sie zwei Datenrahmen vor, df_1 und 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 liegt in der Reihenfolge von b und a und df_2 in der Reihenfolge von a und b.

Concat mit sort = False als Argument

Lassen Sie es uns zuerst mit sort = False übergeben.

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

Gleich wie df_1, ausgerichtet mit den Spalten b und a.

Concat mit sort = True (wie concat ohne sort-Argument)

Wenn hier sort = True gesetzt ist, ist dies wie folgt.

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

In diesem Fall ist die Reihenfolge die Spalten a und b. Wenn Sie das Sortierargument nicht übergeben, wird (vorerst) sort = True angenommen und kombiniert. Stattdessen wird eine Warnung angezeigt.


concated = pd.concat([df_1, df_2])
#Mit der Funktion equals verkettet und verkettet_Überprüfen Sie, ob true gleich ist
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.

Mit der Funktion equals können wir feststellen, dass die beiden dfs concated_true (sort = True) und concated (ohne das sort-Argument) gleich sind.

Praktisches Beispiel: Wenn Spalten unterschiedlich sind

Es ist fast gleich, auch wenn die Spalten unterschiedlich sind.

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

Die gemeinsamen Spalten sind die Spalten a, b und c. Der Unterschied ist Spalte d und Spalte e.

Concat mit sort = False als 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

Wenn Sie die Spalten betrachten, sind sie nicht in alphabetischer Reihenfolge: a, b, c, e, d. Die Spalten a, b, c und e von df_1 sind von rechts an die d-Spalte von df_2 angehängt.

Concat ohne Sortierargument (wie concat mit sort = True)

Wenn Sie diese beiden Datenrahmen ohne Sortierung verknüpfen, erhalten Sie Folgendes.

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

Dies ist in alphabetischer Reihenfolge als a, b, c, d, e. An den Inhalten der Daten hat sich nichts geändert.

Dies hat das gleiche Ergebnis wie sort = True.

concat_true = pd.concat([df_1, df_2], sort=True)
# concat_Überprüfen Sie, ob true und concat identisch sind
concat_true.equals(concat)
# True

# concat_wahr und konkat_Überprüfen Sie, ob false gleich ist
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

Endlich: Wenn die Warnung laut ist, warum nicht vorerst sort = True?

Diese Pandas Concat-Warnung tut nicht weh, wenn sie unbeaufsichtigt bleibt, aber sie trübt. Sort = True kann aus Gründen der Lesbarkeit ausreichend sein, da es keine Auswirkungen auf die Daten selbst hat und nur die Reihenfolge der Spalten von Bedeutung ist.

Der Stapelüberlauf, auf den ich mich bezog, ist wie folgt.

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

Recommended Posts

Sortierwarnung in der Funktion pd.concat
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Schriftliche Auswahlsortierung in C.
Dualität in der Funktion
Die Funktion _authenticate_with_backend wurde in django auth.autenticate nicht mehr unterstützt
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Holen Sie sich den Aufrufer einer Funktion in Python
[Neta] Thread-sichere Sleep-Sortierfunktion in Python (Threading)
Korrigieren Sie die Argumente der in map verwendeten Funktion
Ich habe versucht, die inverse Gammafunktion in Python zu implementieren
Funktionen parallel ausführen
In Python sortieren. Lassen Sie uns als nächstes über den Algorithmus nachdenken.
Generatorfunktion auch in JavaScript
Blasensortierung in Python
Die erste GOLD "Funktion"
Informationen zur Entfaltungsfunktion
Benutzerdefinierte Sortierung in Python3
Was bedeutet das letzte () in einer Funktion in Python?
In Python werden die Elemente in der Liste sortiert und als Elemente und Vielfache ausgegeben.
Lassen Sie das Gleichungsdiagramm der linearen Funktion in Python zeichnen
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Bubble Sort)
Sortieren Sie das String-Array nach Länge und japanischer Silbe
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Machen Sie die Funktion zum Zeichnen japanischer Schriftarten in OpenCV allgemein
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Selective Sort)
Covector, um in Funktion zu denken
In Bezug auf die Aktivierungsfunktion Gelu
Erstellen Sie eine Funktion in Python
Verwenden Sie die Rückruffunktion in Python
Was ist die Aktivierungsfunktion?
Finde Fehler in Python
Sortieren Sie den Pfad natürlich in Python
ntile (Dezil) -Funktion in Python
Implementiere die Timer-Funktion im Pygame
Über die Aufzählungsfunktion (Python)
Absteigende Sorte mit Mongodb in Python
In der Liste verfügbare Methoden
Schalten Sie die Brühwarnung aus
Nichtlineare Funktionsmodellierung in Python
Zeichne die Yin-Funktion in Python
Sofortige Funktion (Lüge) in Python
Was ist die Rückruffunktion?
Sortieren nach Datum in Python
Versuchen Sie, die stochastische Massenfunktion der Binomialverteilung in Python zu transkribieren
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Sortieren Sie die von Python glob erhaltenen Dateinamen in numerischer Reihenfolge
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Verwendung der in .mako (.html) direkt in mako definierten Renderfunktion