2016-09-04 18 views
6

Xét đoạn mã sau, nơi tôi muốn thay đổi chỉ có 1 tế bào, nhưng toàn bộ hàng được thay đổi:julia dataframe thay đổi một tế bào thay đổi toàn bộ hàng

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 

Đó là nếu các df[:,1:end]=0.0 bộ tất cả các tế bào của đó hàng đến cùng một tham chiếu; nhưng tôi thiết lập nó để 0.0, vì vậy tôi hy vọng điều này là một bản sao giá trị, không tham khảo sao chép

phiên bản: phiên bản julia 0.4.6-pre DataFrames v "0.7.8"

Trả lời

4

Có một số răng cưa đang diễn ra ở đây. Tôi nghĩ rằng đây là một lỗi trong DataFrames, mặc dù nó có thể là hành vi dự định của nó, mặc dù lạ. Điều đang xảy ra là dữ liệu cơ bản giống nhau đang được cả hai cột sử dụng. Xem #1052.

Là một khắc phục, bạn có thể thiết lập các cột từng người một:

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

Nó có thể được dự kiến; nó có vẻ như nó cắt cho tôi. Nếu bạn làm 'df [:,:]' hoặc 'df [1: kết thúc, 1: kết thúc]' thay vào đó, nó hoạt động như dự định. Đoán của tôi là 'df [:, 1: end]' vô tình thay đổi thứ hạng cơ bản, và '= 0.' được hiểu là phát sóng bằng cách nào đó –

+0

Có thể có lệnh" lấp đầy "được sử dụng dưới mui xe để thực hiện phát sóng, gây ra bí danh? –

+1

Xin chào Tasos, có một số cuộc thảo luận về vấn đề này trong [# 1052] (https://github.com/JuliaStats/DataFrames.jl/pull/1052). –

Các vấn đề liên quan