Gleichheit in Pandas DataFrames - Reihenfolge der Spalten?
Als Teil eines unit-test, brauche ich zum testen zwei DataFrames für die Gleichstellung. Die Reihenfolge der Spalten in der DataFrames ist mir nicht wichtig. Allerdings scheint es egal zu Pandas:
import pandas
df1 = pandas.DataFrame(index = [1,2,3,4])
df2 = pandas.DataFrame(index = [1,2,3,4])
df1['A'] = [1,2,3,4]
df1['B'] = [2,3,4,5]
df2['B'] = [2,3,4,5]
df2['A'] = [1,2,3,4]
df1 == df2
Ergebnisse in:
Exception: Can only compare identically-labeled DataFrame objects
Ich glaube, der Ausdruck df1 == df2
bewerten sollte, um ein DataFrame mit allen True
Werte. Natürlich ist es fraglich, was die korrekte Funktionalität der ==
werden sollte in diesem Kontext. Meine Frage ist: gibt es Pandas Methode, die das tut, was ich will? Das heißt, gibt es eine Möglichkeit zu tun, der Geschlechter-Vergleich ignoriert, dass die Reihenfolge der Spalten?
Kommentar zu dem Problem
Sie können erzwingen, dass die Spalten identisch sein mit diesem:
df1 == df2.reindex(Spalten=df1.Spalten)
@Zelazny7 eigentlich, dass es nicht immer tun Sie es, wenn z.B. df2 hat zusätzliche Spalten df1.
InformationsquelleAutor der Frage jcrudy | 2013-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
So Sortieren Sie die Spalten mit
Sortieren
:Diese auswerten und zu einem dataframe alle
True
Werte.Als @osa Kommentare diesem Auftritt NaN ' s und ist nicht besonders robust, üben Sie etwas, das ähnlich wie @quant Antwort ist wahrscheinlich empfohlen (Hinweis: wir möchten ein boolescher Wert, anstatt zu erhöhen, wenn es ein Problem):
InformationsquelleAutor der Antwort Andy Hayden
Die häufigste Vorsatz ist behandelt wie diese:
Natürlich sehen
pandas.util.testing.assert_frame_equal
für die anderen Parameter, die Sie übergeben können,InformationsquelleAutor der Antwort Quant
InformationsquelleAutor der Antwort Quant
In der Regel Sie gehen zu wollen, schnelle tests und die Sortierung kann Brutal ineffizient für größere Indizes (wie, wenn Sie wurden mit Zeilen statt Spalten für dieses problem). Die sort-Methode ist auch anfällig für falsch-negative Befunde auf nicht-eindeutige Indizes.
Glücklicherweise
pandas.util.testing.assert_frame_equal
hat seit aktualisiert wurde, mit einemcheck_like
option. Setzen Sie dies auf true, und die Bestellung wird nicht berücksichtigt in der Prüfung.Mit nicht eindeutigen Indizes, erhalten Sie die kryptische
ValueError: cannot reindex from a duplicate axis
. Dies ist die durch das unter-die-Haubereindex_like
Betrieb, ordnet man der DataFrames zu entsprechen, die andere um. Reindexing ist viel schneller als das Sortieren, wie gezeigt, unten.Für diejenigen, die genießen einen guten performance-Vergleich plot:
Reindexing vs Sortierung auf int und str Indizes (str noch drastischer)
InformationsquelleAutor der Antwort Murray Lynch
Sortier-Spalte funktioniert nur, wenn die Zeilen-und Spaltenbeschriftungen match über die Bilder. Sagen, Sie haben 2 dataframes mit identischen Werten in Zellen, sondern mit verschiedenen labels,dann die Art der Lösung wird nicht funktionieren. Ich lief in diesem Szenario bei der Umsetzung des k-modes-clustering mit pandas.
Bekam ich um es mit einem einfachen gleich-Funktion zu prüfen, Zelle Gleichheit(code unten)
InformationsquelleAutor der Antwort Srijith Sreedharan
haben Sie versucht, mit df1.equals(df2)? ich denke, es ist mehr zuverlässig, dass df1==df2, aber ich bin mir nicht sicher, ob es der Lösung Ihrer Probleme mit Spalte um.
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.equals.html
InformationsquelleAutor der Antwort ccook5760