2016-11-14 4 views
4

Ich habe mehrere alte Tabellen, die ich mit neuen Tabellen vergleichen muss, und ich möchte Pandas verwenden, um sie zu vergleichen.Pandas Fehler beim Vergleich zweier Datenrahmen mit Sortierung

Die Daten sieht etwa so aus:

data_old = [ 
    ["John", 1,2,3,None], 
    ["Mary", 1,4,None,"Apples"], 
    ["Jean", None,4,-4,"Peaches"], 
] 
columns = ['name', "A", "B", "C", "D"] 
data_new = [ 
    ["Jean", 5,4,-4,"Peaches"], 
    ["John", 1,-2,3,None], 
    ["Mary", 1,4,None,"Apples"], 
    ] 

Hier haben wir zwei relativ kleine Datenmengen, und die Werte können Text-, Zahlen- oder NULL sein. Ich wollte Teildatensätze mit den Änderungen erstellen und Berichtsdatenrahmen in einen CSV exportieren.

Mein Problem ist das, wenn ich beide Datenrahmen sortieren nach 'name', ich die folgende Fehlermeldung erhalten:

ValueError: Can only compare identically-labeled DataFrame objects

Hier ist, was ich tue:

df_old = pd.DataFrame(data=data_old, columns=columns) 
df_old.sort(columns='name', inplace=True) 
df_new = pd.DataFrame(data=data_new, columns=columns) 
df_new.sort(columns='name', inplace=True) 
ne = (df_old != df_new).any(1) #ERROR 
# to other stuff..... 

Antwort

4

Ich denke, Sie benötigen sort_values statt sort, weil:

FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....)

und dann müssen gleiche Indexwerte in beide DataFrames was Rückkehr reset_index mit dem Parameter drop=True:

df_old = pd.DataFrame(data=data_old, columns=columns) 
df_old.sort_values('name', inplace=True) 
df_new = pd.DataFrame(data=data_new, columns=columns) 
df_new.sort_values('name', inplace=True) 
print (df_old) 
    name A B C  D 
2 Jean NaN 4 -4.0 Peaches 
0 John 1.0 2 3.0  None 
1 Mary 1.0 4 NaN Apples 

print (df_new) 
    name A B C  D 
0 Jean 5 4 -4.0 Peaches 
1 John 1 -2 3.0  None 
2 Mary 1 4 NaN Apples 

df_old.reset_index(drop=True, inplace=True) 
df_new.reset_index(drop=True, inplace=True) 

ne = (df_old != df_new).any(1) 
print (ne) 
0 True 
1 True 
2 True 
dtype: bool 
+0

Ich erscheinen keine sort_values ​​Funktion zu haben. Ich denke, in meiner Version ist es noch nicht veraltet. Version: '0.16.1' –

+0

Ja, ich benutze Version '0.19.1' – jezrael

Verwandte Themen