2016-09-04 8 views
6

निम्नलिखित कोड है, जहां मैं केवल 1 सेल बदलना चाहते हैं पर विचार करें, लेकिन पूरी पंक्ति बदल जाती है:जूलिया dataframe एक कक्ष को बदलने में परिवर्तन पूरी पंक्ति

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 

यह अगर df[:,1:end]=0.0 सेट कि सभी की कोशिकाओं के रूप में है एक ही संदर्भ में पंक्ति; लेकिन मैं इसे 0.0 के लिए सेटिंग कर रहा हूँ, इसलिए मैं इस, एक मूल्य के प्रति हो संदर्भ कॉपी

संस्करण नहीं करने की उम्मीद: जूलिया संस्करण 0.4.6-पूर्व DataFrames v "0.7.8"

उत्तर

4

कुछ अलियासिंग है यहाँ जा रहा है मुझे लगता है कि यह DataFrames में एक बग है, हालांकि यह संभव है कि यह अजीब व्यवहार के बावजूद व्यवहार हो। क्या हो रहा है कि दोनों कॉलम द्वारा समान अंतर्निहित डेटा का उपयोग किया जा रहा है। #1052 देखें।

समाधान के लिए, यदि आप स्तंभों को एक एक करके सेट कर सकते हैं:

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

यह इरादा किया जा सकता है; ऐसा लगता है कि यह मेरे लिए टुकड़ा कर रहा है। यदि आप 'df [:,:]' या 'df [1: end, 1: end] 'करते हैं, तो यह इच्छित के रूप में कार्य करता है। मेरा अनुमान है 'डीएफ [:, 1: अंत]' अनजाने में अंतर्निहित रैंक को बदलता है, और '= 0.' को किसी भी तरह प्रसारित करने के रूप में व्याख्या किया जाता है –

+0

हो सकता है कि ब्रॉडकास्टिंग को लागू करने के लिए हुड के तहत इस्तेमाल किया गया" भरें "कमांड हो, जिससे एलियासिंग हो? –

+1

हाय टैसो, [# 1052] (https://github.com/JuliaStats/DataFrames.jl/pull/1052) में इस मुद्दे पर कुछ चर्चा है। –

संबंधित मुद्दे