2017-12-14 2 views
1

Unser Praktikant schrieb einen Code mit Pandas arbeiten und beschwerte sich er kann Fehler nicht finden, aber die Ergebnisse stimmen nicht mit den Erwartungen überein. Überraschenderweise konnte ich ihm nicht helfen, weil ich in einigen unerwartetes Verhalten mit Pandas lief dataframe.set_value()Pandas set_value() einfügen float benimmt sich seltsam

ich das Problem in dieser dünnt: Einsetzen Float-Werte über 110 oder erzeugt so falsch negative Werte in Datenrahmen.

Ich extrahierte wichtige Werte in eine Liste von Tupeln.

Struktur: [(index_of_df_insert_row, float_value_to_insert), ...]

Hier ist der wichtige Code-Schnipsel:

print(replace_values) 

for index, value in replace_values: 
    grouped_to_data.set_value(index, "Realized_Time_Indirect", value) 
    print(value + " > ") 
    print(grouped_to_data.iloc[index]["Realized_Time_Indirect"]) 
    print() 

Und hier ist das Beispiel für die Ausgabe:

5.6 > 
5 

8.5 > 
8 

43.0 > 
43 

23.0 > 
23 

<<<<<<<<<<<WHY?>>>>>>>>>>> 

147.5 > 
-109 

<<<<<<<<<<<WHY?>>>>>>>>>>> 

28.0 > 
28 

28.5 > 
28 

39.32 > 
39 

17.0 > 
17 

86.30000000000001 > 
86 

58.5 > 
58 
+3

set_value ist in der aktuellen Version von Pandas veraltet. Zweitens, set_value verwendet Indexetiketten, dann verwendet Iloc Indexpositionen, sind sie gleich? Sind Sie sicher, dass Sie nicht etwas wie 'print (group_to_data.loc [index," Realized_Time_Indirect "])' wollen? –

+0

Wie leicht ich das in Docs überspringe ... Danke, ich benutze die Funktion nicht in meinem eigenen Code, ich werde dies als eine richtige Antwort markieren, sobald er bestätigt, dass es funktioniert. –

Antwort

1

Zuerst set_value ist in der aktuellen Version von Pandas veraltet . Zweitens, set_value verwendet Indexetiketten, dann verwendet iloc Indexpositionen, sind sie in Ihrem Dataframe identisch? Wenn Ihr Index nicht mit Null angibt, dann suchen Sie möglicherweise nach anderen Zeilen.

versuchen Lassen Sie etwas Ähnliches statt:

print(group_to_data.loc[index,"Realized_Time_Indirect"])