pandas - मुझे पांडा में डेटा फ्रेम की प्रतिलिपि क्यों बनाना चाहिए




chained-assignment (3)

अभिभावक डेटाफ्रेम से उप डेटाफ़्रेम चुनते समय, मैंने देखा कि कुछ प्रोग्रामर .copy() विधि का उपयोग कर डेटा फ्रेम की एक प्रति बनाते हैं।

वे डेटा फ्रेम की एक प्रति क्यों बना रहे हैं? अगर मैं प्रतिलिपि नहीं बनाऊंगा तो क्या होगा?


आम तौर पर मूल डेटा फ्रेम की तुलना में प्रतियों पर काम करना सुरक्षित होता है, सिवाय इसके कि जब आप जानते हैं कि आपको मूल की आवश्यकता नहीं होगी और मैनिपुलेटेड संस्करण के साथ आगे बढ़ना चाहते हैं। आम तौर पर, आपके पास अभी भी मैनिपुलेटेड वर्जन इत्यादि के साथ तुलना करने के लिए मूल डेटा फ्रेम के लिए कुछ उपयोग होगा। इसलिए, अधिकांश लोग प्रतियां काम करते हैं और अंत में विलय करते हैं।


क्योंकि यदि आप एक प्रतिलिपि नहीं बनाते हैं तो सूचकांक अभी भी कहीं और छेड़छाड़ किए जा सकते हैं भले ही आप डेटा को किसी भिन्न नाम पर निर्दिष्ट करते हैं।

उदाहरण के लिए:

df2 = df
func1(df2)
func2(df)

func1 df2 को संशोधित करके डीएफ को संशोधित कर सकता है, इसलिए इससे बचने के लिए:

df2 = df.copy()
func1(df2)
func2(df)

यह पॉल के जवाब पर फैलता है। पांडस में, डेटाफ्रेम को अनुक्रमणित करना प्रारंभिक डेटाफ्रेम का संदर्भ देता है। इस प्रकार, सबसेट बदलने से प्रारंभिक डेटाफ्रेम बदल जाएगा। इस प्रकार, यदि आप यह सुनिश्चित करना चाहते हैं कि प्रारंभिक डेटाफ्रेम नहीं बदला जाना चाहिए तो आप प्रतिलिपि का उपयोग करना चाहेंगे। निम्नलिखित कोड पर विचार करें:

df = DataFrame({'x': [1,2]})
df_sub = df[0:1]
df_sub.x = -1
print(df)

आपको मिलेगा:

x
0 -1
1  2

इसके विपरीत, निम्नलिखित पत्ते डीएफ अपरिवर्तित:

df_sub_copy = df[0:1].copy()
df_sub_copy.x = -1




chained-assignment