pandas 0.23 - 30. Comparison with SAS
एसएएस के साथ तुलना

एसएएस के साथ तुलना
SAS से आने वाले संभावित उपयोगकर्ताओं के लिए यह पृष्ठ प्रदर्शित करने के लिए है कि पांडा में अलग-अलग एसएएस ऑपरेशन कैसे किए जाएंगे।
यदि आप पांडा के लिए नए हैं, तो आप लाइब्रेरी से खुद को परिचित करने के लिए पहले 10 मिनट पंडों के माध्यम से पढ़ना चाह सकते हैं।
जैसा कि प्रथागत है, हम निम्नानुसार पांडा और न्यूमपी आयात करते हैं:
In [1]: import pandas as pd In [2]: import numpy as np
ध्यान दें
इस ट्यूटोरियल के दौरान,
DataFrame
को
df.head()
कॉल करके प्रदर्शित किया जाएगा, जो
df.head()
की पहली एन (डिफ़ॉल्ट 5) पंक्तियों को प्रदर्शित करता है।
इसका उपयोग अक्सर इंटरैक्टिव काम में किया जाता है (उदाहरण के लिए
ज्यूपिटर नोटबुक
या टर्मिनल) - एसएएस में बराबर होगा:
proc print data=df(obs=5); run;
डेटा संरचनाएं
सामान्य शब्दावली अनुवाद
पांडा | एसएएस |
---|---|
DataFrame
|
डेटा सेट |
स्तंभ | परिवर्तनशील |
पंक्ति | अवलोकन |
समूह द्वारा | BY-समूह |
NaN
|
.
|
DataFrame
/
Series
पांडा में एक
DataFrame
एसएएस डेटा सेट के अनुरूप है - लेबल कॉलम के साथ एक दो-आयामी डेटा स्रोत जो विभिन्न प्रकार के हो सकते हैं।
जैसा कि इस दस्तावेज़ में दिखाया जाएगा, लगभग कोई भी ऑपरेशन जिसे एसएएस के
DATA
चरण का उपयोग करके डेटा सेट पर लागू किया जा सकता है, पंडों में भी पूरा किया जा सकता है।
एक
Series
डेटा संरचना है जो एक
DataFrame
एक कॉलम का प्रतिनिधित्व
DataFrame
।
एसएएस के पास एक एकल स्तंभ के लिए एक अलग डेटा संरचना नहीं है, लेकिन सामान्य तौर पर,
Series
साथ काम करना
DATA
चरण में एक कॉलम को संदर्भित करने के लिए अनुरूप है।
Index
प्रत्येक
DataFrame
और
Series
में एक
Index
- जो डेटा की
पंक्तियों
पर लेबल होता है।
एसएएस में बिल्कुल अनुरूप अवधारणा नहीं है।
डेटा सेट की पंक्तियाँ अनिवार्य रूप से
_N_
, एक अंतर्निहित पूर्णांक सूचकांक के अलावा जो कि
DATA
चरण (
_N_
) के दौरान पहुँचा जा सकता है।
पांडा में, यदि कोई सूचकांक निर्दिष्ट नहीं है, तो एक पूर्णांक सूचकांक का उपयोग डिफ़ॉल्ट रूप से भी किया जाता है (पहली पंक्ति = 0, दूसरी पंक्ति = 1, और इसी तरह)।
एक लेबल किए गए
Index
या
MultiIndex
का उपयोग करते समय परिष्कृत विश्लेषण सक्षम कर सकते हैं और अंततः समझने के लिए पांडा का एक महत्वपूर्ण हिस्सा है, इस तुलना के लिए हम अनिवार्य रूप से
Index
अनदेखा करेंगे और बस कॉलम के संग्रह के रूप में
DataFrame
इलाज करेंगे।
किसी
Index
प्रभावी ढंग से उपयोग करने के बारे में कृपया अधिक
इंडेक्सिंग प्रलेखन
देखें।
डेटा इनपुट / आउटपुट
मानों से एक DataFrame का निर्माण
एक एसएएस डेटा सेट को एक
datalines
स्टेटमेंट के बाद डेटा को रखकर और कॉलम नामों को निर्दिष्ट करके निर्दिष्ट मूल्यों से बनाया जा सकता है।
data df; input x y; datalines; 1 2 3 4 5 6 ; run;
एक पांडा
DataFrame
का निर्माण कई अलग-अलग तरीकों से किया जा सकता है, लेकिन बहुत कम मूल्यों के लिए, इसे अक्सर पायथन शब्दकोश के रूप में निर्दिष्ट करना सुविधाजनक होता है, जहां कुंजी स्तंभ नाम होते हैं और मान डेटा होते हैं।
In [3]: df = pd.DataFrame({ ...: 'x': [1, 3, 5], ...: 'y': [2, 4, 6]}) ...: In [4]: df Out[4]: x y 0 1 2 1 3 4 2 5 6
बाहरी डेटा पढ़ना
एसएएस की तरह, पांडा कई प्रारूपों के डेटा में पढ़ने के लिए उपयोगिताओं प्रदान करता है।
पंडों के परीक्षण (
csv
) के भीतर पाए जाने वाले
tips
उपयोग निम्नलिखित कई उदाहरणों में किया जाएगा।
एसएएस सीएससी डेटा को डेटा सेट में पढ़ने के लिए
PROC IMPORT
प्रदान करता है।
proc import datafile='tips.csv' dbms=csv out=tips replace; getnames=yes; run;
पांडा विधि
read_csv()
, जो इसी तरह काम करती है।
In [5]: url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv' In [6]: tips = pd.read_csv(url) In [7]: tips.head() Out[7]: total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4
PROC IMPORT
तरह,
read_csv
यह निर्दिष्ट करने के लिए कई पैरामीटर ले सकता है कि डेटा कैसे पार्स किया जाना चाहिए।
उदाहरण के लिए, यदि डेटा के बजाय टैब सीमांकित किया गया था, और स्तंभ नाम नहीं थे, तो पांडा कमांड होगा:
tips = pd.read_csv('tips.csv', sep='\t', header=None) # alternatively, read_table is an alias to read_csv with tab delimiter tips = pd.read_table('tips.csv', header=None)
पाठ / सीएसवी के अलावा, पांडा एक्सेल, एचडीएफ 5 और एसक्यूएल डेटाबेस जैसे कई अन्य डेटा प्रारूपों का समर्थन करते हैं।
ये सभी एक
pd.read_*
फ़ंक्शन के माध्यम से पढ़े जाते हैं।
अधिक विवरण के लिए
IO प्रलेखन
देखें।
डेटा निर्यात करना
SAS में
PROC IMPORT
का व्युत्क्रम
PROC EXPORT
proc export data=tips outfile='tips2.csv' dbms=csv; run;
इसी तरह पांडा में,
read_csv
का विपरीत
to_csv()
, और अन्य डेटा प्रारूप एक समान एपीआई का अनुसरण करते हैं।
tips.to_csv('tips2.csv')
डेटा संचालन
कॉलम पर संचालन
DATA
चरण में, नए या मौजूदा कॉलम पर मनमाने ढंग से गणित के भावों का उपयोग किया जा सकता है।
data tips; set tips; total_bill = total_bill - 2; new_bill = total_bill / 2; run;
पांडा
DataFrame
में व्यक्तिगत
Series
को निर्दिष्ट करके इसी तरह के
DataFrame
संचालन प्रदान करता है।
नए कॉलम उसी तरह से असाइन किए जा सकते हैं।
In [8]: tips['total_bill'] = tips['total_bill'] - 2 In [9]: tips['new_bill'] = tips['total_bill'] / 2.0 In [10]: tips.head() Out[10]: total_bill tip sex smoker day time size new_bill 0 14.99 1.01 Female No Sun Dinner 2 7.495 1 8.34 1.66 Male No Sun Dinner 3 4.170 2 19.01 3.50 Male No Sun Dinner 3 9.505 3 21.68 3.31 Male No Sun Dinner 2 10.840 4 22.59 3.61 Female No Sun Dinner 4 11.295
छनन
एसएएस में फ़िल्टरिंग एक या एक से अधिक कॉलम पर,
if
या
where
बयान के साथ किया जाता है।
data tips; set tips; if total_bill > 10; run; data tips; set tips; where total_bill > 10; /* equivalent in this case - where happens before the DATA step begins and can also be used in PROC statements */ run;
DataFrames को कई तरीकों से फ़िल्टर किया जा सकता है; सबसे सहज जो बूलियन इंडेक्सिंग का उपयोग कर रहा है
In [11]: tips[tips['total_bill'] > 10].head() Out[11]: total_bill tip sex smoker day time size 0 14.99 1.01 Female No Sun Dinner 2 2 19.01 3.50 Male No Sun Dinner 3 3 21.68 3.31 Male No Sun Dinner 2 4 22.59 3.61 Female No Sun Dinner 4 5 23.29 4.71 Male No Sun Dinner 4
यदि / तब तर्क
SAS में, यदि / तो तर्क का उपयोग नए कॉलम बनाने के लिए किया जा सकता है।
data tips; set tips; format bucket $4.; if total_bill < 10 then bucket = 'low'; else bucket = 'high'; run;
पांडा में एक ही ऑपरेशन को
numpy
से विधि का उपयोग करके पूरा किया जा सकता है।
In [12]: tips['bucket'] = np.where(tips['total_bill'] < 10, 'low', 'high') In [13]: tips.head() Out[13]: total_bill tip sex smoker day time size bucket 0 14.99 1.01 Female No Sun Dinner 2 high 1 8.34 1.66 Male No Sun Dinner 3 low 2 19.01 3.50 Male No Sun Dinner 3 high 3 21.68 3.31 Male No Sun Dinner 2 high 4 22.59 3.61 Female No Sun Dinner 4 high
तिथि कार्यशीलता
SAS विभिन्न प्रकार के कार्य प्रदान करता है जैसे दिनांक / डेटाटाइम कॉलम पर संचालन करना।
data tips; set tips; format date1 date2 date1_plusmonth mmddyy10.; date1 = mdy(1, 15, 2013); date2 = mdy(2, 15, 2015); date1_year = year(date1); date2_month = month(date2); * shift date to beginning of next interval; date1_next = intnx('MONTH', date1, 1); * count intervals between dates; months_between = intck('MONTH', date1, date2); run;
समकक्ष पांडा संचालन नीचे दिखाए गए हैं। इन कार्यों के अलावा पांडा बेस एसएएस (जैसे कि रिसमलिंग और कस्टम ऑफ़सेट) में उपलब्ध नहीं अन्य टाइम सीरीज़ सुविधाओं का समर्थन करता है - अधिक विवरण के लिए टाइमसीज़ प्रलेखन देखें।
In [14]: tips['date1'] = pd.Timestamp('2013-01-15') In [15]: tips['date2'] = pd.Timestamp('2015-02-15') In [16]: tips['date1_year'] = tips['date1'].dt.year In [17]: tips['date2_month'] = tips['date2'].dt.month In [18]: tips['date1_next'] = tips['date1'] + pd.offsets.MonthBegin() In [19]: tips['months_between'] = (tips['date2'].dt.to_period('M') - ....: tips['date1'].dt.to_period('M')) ....: In [20]: tips[['date1','date2','date1_year','date2_month', ....: 'date1_next','months_between']].head() ....: Out[20]: date1 date2 date1_year date2_month date1_next months_between 0 2013-01-15 2015-02-15 2013 2 2013-02-01 25 1 2013-01-15 2015-02-15 2013 2 2013-02-01 25 2 2013-01-15 2015-02-15 2013 2 2013-02-01 25 3 2013-01-15 2015-02-15 2013 2 2013-02-01 25 4 2013-01-15 2015-02-15 2013 2 2013-02-01 25
कॉलम का चयन
SAS स्तंभों को चुनने, छोड़ने और नाम बदलने के लिए
DATA
चरण में कीवर्ड प्रदान करता है।
data tips; set tips; keep sex total_bill tip; run; data tips; set tips; drop sex; run; data tips; set tips; rename total_bill=total_bill_2; run;
नीचे के पांडा में समान संचालन व्यक्त किए जाते हैं।
# keep In [21]: tips[['sex', 'total_bill', 'tip']].head() Out[21]: sex total_bill tip 0 Female 14.99 1.01 1 Male 8.34 1.66 2 Male 19.01 3.50 3 Male 21.68 3.31 4 Female 22.59 3.61 # drop In [22]: tips.drop('sex', axis=1).head()