2016-09-04 26 views
6

Sadece 1 hücreyi değiştirmek istediğiniz şu kodu göz önünde değiştirir, ancak tüm satırı değişti alır:Julia dataframe tüm satırı

df=DataFrames.DataFrame(A=[1,2],B=[3,4]) 

df[2,:A]=7 # this is OK, changes only 1 cell 

df[:,1:end]=0.0 # this line somehow makes the change in the next line behave unexpectedly 

df[2,:A]=7 # entire 2nd row is 7 

O bunun df[:,1:end]=0.0 setleri ise tüm hücreleri olarak var aynı referansa satır; ama 0.0 bunu kuruyorum, bu yüzden bu

Sürümleri kopyalamak referans bir değer kopyası olmayabilir bekliyoruz: Julia sürüm 0.4.6 önceden DataFrames v "0.7.8"

cevap

4

bazı örtüşme var burada devam ediyor. Bence bu, DataFrames numaralı telefondaki bir hatadır, ancak garip de olsa, amaçlanan davranışın olması olasıdır. Olan şey, aynı temel verilerin her iki sütun tarafından kullanılmakta olmasıdır. Bakınız #1052.

bir çözüm olarak, sütunlar tek tek ayarlayabilirsiniz:

for c in 1:size(df, 2) 
    df[:,c] = 0.0 
end 
+0

O amaçlanan olabilir; Bana dilimlemek gibi görünüyor. Bunun yerine df [:,:] 'veya' df [1: son, 1: son] 'yaparsanız, amaçlandığı gibi çalışır. Benim tahminim df [:, 1: son] 'altta yatan sıralamayı değiştirir ve' = 0.' bir şekilde yayın olarak yorumlanır –

+0

Belki de yayınlamayı gerçekleştirmek için başlık altında kullanılan bir "dolgu" komutu var, takma ismine neden oluyor? –

+1

Merhaba Tasos, konuyla ilgili bazı tartışmalar var [# 1052] (https://github.com/JuliaStats/DataFrames.jl/pull/1052). –