2017-05-07 12 views
6

देखो:पांडा बनाम कोड के इन कुछ पंक्तियों में Numpy Dataframes

df2 = df.copy() 
df2[1:] = df[1:]/df[:-1].values -1 
df2.ix[0, :] = 0 

हमारे प्रशिक्षक ने कहा कि हम अन्यथा, हमारे कोड नहीं होता, अंतर्निहित numpy सरणी का उपयोग करने की .values ​​ विशेषता का उपयोग करने की आवश्यकता है काम।

मैं समझता हूं कि एक पांडा डेटाफ्रेम के पास एक गंदे सरणी के रूप में अंतर्निहित प्रतिनिधित्व होता है, लेकिन मुझे समझ में नहीं आया कि हम सीधे टुकड़े का उपयोग करके पांडा डेटाफ्रेम पर क्यों काम नहीं कर सकते हैं।

क्या आप मुझे इसके बारे में बता सकते हैं?

उत्तर

7

पांडा टैब्यूलर डेटा संरचनाओं पर केंद्रित है और संचालन (अतिरिक्त, घटाव आदि) करते समय यह लेबल को देखता है - पदों पर नहीं।

निम्नलिखित DataFrame पर विचार करें:

df = pd.DataFrame(np.random.randn(5, 3), index=list('abcde'), columns=list('xyz')) 

यहाँ, df[1:] है:

df[1:] 
Out: 
      x   y   z 
b 1.003035 0.172960 1.160033 
c 0.117608 -1.114294 -0.557413 
d -1.312315 1.171520 -1.034012 
e -0.380719 -0.422896 1.073535 

और df[:-1] है:

df[:-1] 
Out: 
      x   y   z 
a 1.367916 1.087607 -0.625777 
b 1.003035 0.172960 1.160033 
c 0.117608 -1.114294 -0.557413 
d -1.312315 1.171520 -1.034012 

आप df[1:]/df[:-1] करते हैं यह पंक्ति को विभाजित करेगा b की पंक्ति द्वारा b, आर ow c पंक्ति c की पंक्ति और पंक्ति d की पंक्ति d है। पंक्ति a और e के लिए, यह अन्य DataFrame में इसी पंक्तियों (या तो एक दूसरे के पहले एक में या में) ढूँढने में सक्षम तो नहीं होगा यह nan वापस आ जाएगी:

df[1:]/df[:-1] 
Out: 
    x y z 
a NaN NaN NaN 
b 1.0 1.0 1.0 
c 1.0 1.0 1.0 
d 1.0 1.0 1.0 
e NaN NaN NaN 

तुम सिर्फ करना चाहते हैं तो लेबल्स को अनदेखा करते हुए तत्व-वार विभाजन, फ्रेम में से किसी एक के लिए .values द्वारा अंतर्निहित numpy सरणी तक पहुंचने के लिए लेबलों को अनदेखा करने के लिए पांडा को बताने का एक तरीका है। मैं समझता हूँ कि अंतिम परिणाम एक ही हो गया होता

df[1:]/df[:-1].values 
Out: 
      x   y   z 
b 0.733258 0.159028 -1.853749 
c 0.117252 -6.442482 -0.480515 
d -11.158359 -1.051357 1.855018 
e 0.290112 -0.360981 -1.038223 
+0

अब, है, लेकिन मुझे आश्चर्य है कि अगर यह अधिक औपचारिक रूप से करने के लिए सही हो गया होता: चूंकि NumPy सरणी के लेबल नहीं है, पांडा बस तत्व के लिहाज से संचालन करना होगा संख्यात्मक के लिए एक numpy सरणी का भी उपयोग करें .. – MadHatter

+1

उस स्थिति में, पूरा ऑपरेशन numpy में होगा ताकि यह लेबल के बिना एक सरणी वापस कर देगा। ध्यान दें कि अंतिम आउटपुट में ('डीएफ [1:]/डीएफ [: - 1] .values') परिणाम डेटाफ्रेम है। तो यह आपकी जरूरतों पर आधारित होगा। – ayhan

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