pandas 0.23 - 19. Categorical Data

सुस्पष्ट डेटा




pandas

सुस्पष्ट डेटा

यह पांडा के श्रेणीबद्ध डेटा प्रकार का परिचय है, जिसमें आर के factor साथ एक छोटी तुलना शामिल है।

Categoricals एक आँकड़ों में श्रेणीबद्ध चर के अनुरूप एक पांडा डेटा प्रकार हैं। एक श्रेणीगत चर सीमित, और आमतौर पर निश्चित, संभावित मानों की संख्या ( categories ; आर में levels ) पर लेता है। उदाहरण लिंग, सामाजिक वर्ग, रक्त के प्रकार, देश की संबद्धता, अवलोकन समय या रेटिंग जैसे पैमाने हैं।

सांख्यिकीय श्रेणीबद्ध चर के विपरीत, श्रेणीबद्ध डेटा में एक आदेश हो सकता है (जैसे 'दृढ़ता से सहमत' बनाम 'सहमत' या 'पहला अवलोकन' बनाम 'दूसरा अवलोकन'), लेकिन संख्यात्मक संचालन (परिवर्धन, विभाजन, ...) संभव नहीं है।

श्रेणीबद्ध डेटा के सभी मूल्य या तो categories या np.nan । आदेश categories के क्रम से परिभाषित होता है, न कि मूल्यों के शाब्दिक क्रम से। आंतरिक रूप से, डेटा संरचना में categories सरणी और codes का पूर्णांक सरणी होता है जो categories सरणी में वास्तविक मान को इंगित करता है।

निम्न मामलों में श्रेणीबद्ध डेटा प्रकार उपयोगी है:

  • एक स्ट्रिंग चर जिसमें केवल कुछ अलग-अलग मूल्य होते हैं। इस तरह के स्ट्रिंग चर को एक श्रेणीगत चर में बदलने से कुछ मेमोरी बच जाएगी, here देखें।
  • एक चर का शाब्दिक क्रम तार्किक क्रम ("एक", "दो", "तीन") के समान नहीं है। श्रेणियों में एक क्रमिक और एक आदेश को निर्दिष्ट करके, छँटाई और न्यूनतम / अधिकतम, अधिकतम क्रम के बजाय तार्किक क्रम का उपयोग करेंगे, here देखें।
  • अन्य पायथन पुस्तकालयों के लिए एक संकेत के रूप में कि इस कॉलम को एक श्रेणीगत चर के रूप में माना जाना चाहिए (जैसे उपयुक्त सांख्यिकीय विधियों या प्लॉट प्रकारों का उपयोग करने के लिए)।

श्रेणियों पर एपीआई डॉक्स भी देखें।

वस्तु निर्माण

श्रृंखला निर्माण

DataFrame में श्रेणीबद्ध Series या कॉलम कई तरीकों से बनाए जा सकते हैं:

एक Series निर्माण करते समय dtype="category" निर्दिष्ट करके:

In [1]: s = pd.Series(["a","b","c","a"], dtype="category")

In [2]: s
Out[2]: 
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]

किसी मौजूदा Series या स्तंभ को category dtype में परिवर्तित करके:

In [3]: df = pd.DataFrame({"A":["a","b","c","a"]})

In [4]: df["B"] = df["A"].astype('category')

In [5]: df
Out[5]: 
   A  B
0  a  a
1  b  b
2  c  c
3  a  a

विशेष कार्यों का उपयोग करके, जैसे कि cut() , जो डेटा को असतत डिब्बे में रखता है। डॉक्स में टाइलिंग पर उदाहरण देखें।

In [6]: df = pd.DataFrame({'value': np.random.randint(0, 100, 20)})

In [7]: labels = ["{0} - {1}".format(i, i + 9) for i in range(0, 100, 10)]

In [8]: df['group'] = pd.cut(df.value, range(0, 105, 10), right=False, labels=labels)

In [9]: df.head(10)
Out[9]: 
   value    group
0     65  60 - 69
1     49  40 - 49
2     56  50 - 59
3     43  40 - 49
4     43  40 - 49
5     91  90 - 99
6     32  30 - 39
7     87  80 - 89
8     36  30 - 39
9      8    0 - 9

एक Series लिए एक pandas.Categorical ऑब्जेक्ट पास करके या उसे DataFrame असाइन करना।

In [10]: raw_cat = pd.Categorical(["a","b","c","a"], categories=["b","c","d"],
   ....:                          ordered=False)
   ....: 

In [11]: s = pd.Series(raw_cat)

In [12]: s
Out[12]: 
0    NaN
1      b
2      c
3    NaN
dtype: category
Categories (3, object): [b, c, d]

In [13]: df = pd.DataFrame({"A":["a","b","c","a"]})

In [14]: df["B"] = raw_cat

In [15]: df
Out[15]: 
   A    B
0  a  NaN
1  b    b
2  c    c
3  a  NaN

श्रेणीबद्ध डेटा में एक विशिष्ट category dtype :

In [16]: df.dtypes
Out[16]: 
A      object
B    category
dtype: object

DataFrame निर्माण

पिछले खंड के समान जहां एक एकल स्तंभ को श्रेणीबद्ध में परिवर्तित किया गया था, एक DataFrame में सभी स्तंभ निर्माण के दौरान या बाद में DataFrame परिवर्तित हो सकते हैं।

यह dtype="category" कंस्ट्रक्टर में dtype="category" को निर्दिष्ट करके निर्माण के दौरान किया जा सकता है:

In [17]: df = pd.DataFrame({'A': list('abca'), 'B': list('bccd')}, dtype="category")

In [18]: df.dtypes
Out[18]: 
A    category
B    category
dtype: object

ध्यान दें कि प्रत्येक कॉलम में मौजूद श्रेणियां भिन्न होती हैं; रूपांतरण कॉलम द्वारा कॉलम किया जाता है, इसलिए किसी दिए गए कॉलम में मौजूद लेबल ही श्रेणियां हैं:

In [19]: df['A']
Out[19]: 
0    a
1    b
2    c
3    a
Name: A, dtype: category
Categories (3, object): [a, b, c]

In [20]: df['B']