2014-05-15 5 views
7

मैं मामलों में SettingWithCopyWarning त्रुटियों जहां मैं उन्हें अपेक्षा नहीं मिल (?):SettingWithCopyWarning, तब भी जब loc का उपयोग कर

N.In <38>: # Column B does not exist yet 
N.In <39>: df['B'] = df['A']/25 
N.In <40>: df['B'] = df['A']/50 

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/pandas/core/indexing.py:389: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_index,col_indexer] = value instead 
    self.obj[item] = s 

और

N.In <41>: df.loc[:,'B'] = df['A']/50 

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/pandas/core/indexing.py:389: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_index,col_indexer] = value instead 
    self.obj[item] = s 

यह मामला 1 और 2 में क्यों होता है?

+0

आपको कोड दिखाने की ज़रूरत है इससे पहले (जितना आप कर सकते हैं) – Jeff

+0

धन्यवाद @ जेफ मैंने ओपी को कुछ पिछली लाइनों के साथ अपडेट किया –

+0

इससे पहले जोड़ें; आप पहले – Jeff

उत्तर

7

मामले में 1, df['A']df की एक प्रति बनाता है। जैसा कि Pandas documentation द्वारा समझाया गया है, इससे चेन होने पर अप्रत्याशित परिणाम हो सकते हैं, इस प्रकार एक चेतावनी उठाई जाती है। केस 2 सही है, लेकिन झूठे सकारात्मक संभव हो रहे हैं:

चेतावनी: श्रृंखलित काम चेतावनी/अपवाद करने का लक्ष्य है एक संभवतः अवैध काम के उपयोगकर्ता को सूचित करें। झूठी पॉजिटिव हो सकती है; ऐसी परिस्थितियां जहां एक जंजीर असाइनमेंट अनजाने में रिपोर्ट किया गया है।

एक भी dataframe के लिए SettingWithCopyWarning बंद करने के लिए,

df.is_copy = False 

श्रृंखलित काम चेतावनी बंद करने के लिए पूरी तरह से उपयोग करते हैं,

options.mode.chained_assignment = None 
+0

चेतावनी को अक्षम करने के लिए निम्नलिखित का उपयोग करें: 'pd.set_option ('chained_assignment', कोई नहीं)' – danger89

3

एक अन्य समाधान है कि चेतावनी को दबाने चाहिए का उपयोग करें:

df = df.copy() 
df['B'] = df['A']/25 
df['B'] = df['A']/50 
+1

यह वास्तव में काम करता है। पूरी तरह से समझ में नहीं आता है कि यह अब तेज या अधिक स्मृति उपभोग कर रहा है। मैं कॉपी() कमांड के प्रभाव को नहीं जानता। चूंकि वास्तव में प्रतिलिपि फिर से डीएफ पर फिर से सौंपी जाती है .. ऐसा लगता है कि अंत में कुछ भी नहीं बदला गया है। – danger89

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