2017-05-09 3 views
6

Numpy काम करता है, जैसे np.mean(), np.var(), आदि, एक सरणी की तरह तर्क स्वीकार करते हैं, np.array, या सूची, आदिअंधा कार्य आंतरिक रूप से पांडा वस्तुओं पर कैसे काम करते हैं?

लेकिन एक पांडा dataframe भी काम करता है में से गुजर रहा है। इसका मतलब है कि एक पांडा डेटाफ्रेम वास्तव में खुद को एक सुस्त सरणी के रूप में छिपा सकता है, जिसे मुझे थोड़ा अजीब लगता है (इस तथ्य को जानने के बावजूद कि एक डीएफ के अंतर्निहित मूल्य वास्तव में numpy arrays हैं)।

किसी ऑब्जेक्ट के लिए एक सरणी जैसा होना, मैंने सोचा कि यह एक numpy सरणी कटा हुआ तरीके से पूर्णांक अनुक्रमण का उपयोग कर slicable होना चाहिए। तो उदाहरण के लिए डीएफ [1: 3, 2: 3] काम करना चाहिए, लेकिन इससे एक त्रुटि होगी।

तो, संभावित रूप से डेटाफ्रेम को फ़ंक्शन के अंदर जाने पर एक numpy सरणी में परिवर्तित कर देता है। लेकिन अगर ऐसा है तो np.mean (numpy_array) np.mean (df) की तुलना में एक अलग परिणाम क्यों लेता है?

a = np.random.rand(4,2) 
a 
Out[13]: 
array([[ 0.86688862, 0.09682919], 
    [ 0.49629578, 0.78263523], 
    [ 0.83552411, 0.71907931], 
    [ 0.95039642, 0.71795655]]) 

np.mean(a) 
Out[14]: 0.68320065182041034 

क्या नीचे देता तुलना में एक अलग परिणाम देता है,

df = pd.DataFrame(data=a, index=range(np.shape(a)[0]), 
columns=range(np.shape(a)[1])) 

df 
Out[18]: 
     0   1 
0 0.866889 0.096829 
1 0.496296 0.782635 
2 0.835524 0.719079 
3 0.950396 0.717957 

np.mean(df) 
Out[21]: 
0 0.787276 
1 0.579125 
dtype: float64 

पूर्व उत्पादन एक संख्या है ... उत्तरार्द्ध जबकि एक स्तंभ-वार मतलब है। डेटाफ्रेम के निर्माण के बारे में एक numpy फ़ंक्शन कैसे पता चलता है?

+0

अंतर्निहित सरणी डेटा का उपयोग करने के लिए, हम करने की जरूरत है '.values' का उपयोग करें। इसके बिना, यह बिल्कुल सरणी डेटा नहीं है। परिणाम NumPy funcs के साथ संगत होना चाहिए। – Divakar

उत्तर

4

आप इस के माध्यम से कदम हैं:

--Call-- 
> d:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\numpy\core\fromnumeric.py(2796)mean() 
-> def mean(a, axis=None, dtype=None, out=None, keepdims=False): 
(Pdb) s 
> d:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\numpy\core\fromnumeric.py(2877)mean() 
-> if type(a) is not mu.ndarray: 
(Pdb) s 
> d:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\numpy\core\fromnumeric.py(2878)mean() 
-> try: 
(Pdb) s 
> d:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\numpy\core\fromnumeric.py(2879)mean() 
-> mean = a.mean 

आप देख सकते हैं कि type नहीं है एक ndarray तो यह a.mean कॉल करने के लिए कोशिश करता है जो इस मामले में df.mean() होगा:

In [6]: 

df.mean() 
Out[6]: 
0 0.572999 
1 0.468268 
dtype: float64 

यह वह जगह है आउटपुट अलग क्यों है

उपरोक्त पुन: उत्पन्न करने के लिए कोड:

In [3]: 
a = np.random.rand(4,2) 
a 

Out[3]: 
array([[ 0.96750329, 0.67623187], 
     [ 0.44025179, 0.97312747], 
     [ 0.07330062, 0.18341157], 
     [ 0.81094166, 0.04030253]]) 

In [4]:  
np.mean(a) 

Out[4]: 
0.52063384885403818 

In [5]:  
df = pd.DataFrame(data=a, index=range(np.shape(a)[0]), 
columns=range(np.shape(a)[1])) 
​ 
df 

Out[5]: 
      0   1 
0 0.967503 0.676232 
1 0.440252 0.973127 
2 0.073301 0.183412 
3 0.810942 0.040303 

numpy उत्पादन:

In [7]: 
np.mean(df) 

Out[7]: 
0 0.572999 
1 0.468268 
dtype: float64 

आप .values कहा जाता था, तो एक np सरणी वापस जाने के लिए तो उत्पादन में एक ही है:

In [8]: 
np.mean(df.values) 

Out[8]: 
0.52063384885403818 
संबंधित मुद्दे