2017-04-07 4 views
2

Gibt es einen Unterschied zwischen rename und rename! beim Bau einer neuen DataFrame in Julia? Ich glaube im Allgemeinen, wenn ein existierendes DataFramerename! modifiziert wird, ist ideal, da es seine Argumente ändert, ohne ein neues Objekt im Gedächtnis zu erzeugen.Unterschied zwischen Umbenennen! und mit neuem DataFrame in Julia umbenennen?

Da aber kein Objekt im Speicher vorhanden ist, scheint rename angemessen zu sein.

using DataFrames 
df1 = rename(DataFrame(rand((100,2))), [:x1, :x2], [:x, :y]) 
df2 = rename!(DataFrame(rand((100,2))), [:x1, :x2], [:x, :y]) 

# Ideal formulation not using rename (currently no matching method) 
df0 = DataFrame(rand((100,2)), [:x, :y]) 

Antwort

3

Die rename! Form modifiziert das Argument Datenrahmen während der rename Version einen neuen Datenrahmen mit neuem Spaltennamen-Konstrukten. Da Sie den Datenrahmen konstruieren und dann sofort seine Spalten umbenennen, ist es sicherer und effizienter, rename! zu verwenden. Wenn ein Verweis auf den inneren Datenrahmen vorhanden ist, den Sie nicht sichtbar ändern möchten, sollten Sie die nicht mutierende rename-Funktion verwenden. Der Unterschied ist hier zu sehen:

julia> df0 = DataFrame(rand((3,2))) 
3×2 DataFrames.DataFrame 
│ Row │ x1  │ x2  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df1 = rename(df0, [:x1, :x2], [:x, :y]) 
3×2 DataFrames.DataFrame 
│ Row │ x  │ y  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df0 
3×2 DataFrames.DataFrame 
│ Row │ x1  │ x2  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df0 === df1 
false 

julia> df2 = rename!(df0, [:x1, :x2], [:x, :y]) 
3×2 DataFrames.DataFrame 
│ Row │ x  │ y  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df0 
3×2 DataFrames.DataFrame 
│ Row │ x  │ y  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df0 === df2 
true 

Der Datenrahmen zurückgegeben von rename ist ein neuer Datenrahmen mit unterschiedlichen Spaltenbeschriftungen - dh df1 !== df0 - während der Datenrahmen zurückgegeben durch rename! ist der gleiche Datenrahmen mit geänderter Säule geleitet in Name - dh df1 === df0. Möglicherweise möchten Sie eine Diskussion über Julia's Discourse forum über Komfortmethoden zum Erstellen von Datenrahmen starten.