2014-11-14 7 views
13

मुझे v0.15 + में पांडस के बेहतर वर्गीकरणों के साथ काम करने के लिए एक साधारण प्रकार की टाइपिंग प्रतीत नहीं हो रही है। असल में मैं बस is_categorical(column) -> True/False की तरह कुछ चाहता हूँ।जांचें कि डेटाफ्रेम कॉलम स्पष्ट है

import pandas as pd 
import numpy as np 
import random 

df = pd.DataFrame({ 
    'x': np.linspace(0, 50, 6), 
    'y': np.linspace(0, 20, 6), 
    'cat_column': random.sample('abcdef', 6) 
}) 
df['cat_column'] = pd.Categorical(df2['cat_column']) 

हम देख सकते हैं कि स्पष्ट स्तंभ के लिए dtype 'श्रेणी' है:

df.cat_column.dtype 
Out[20]: category 

और सामान्य रूप से हम सिर्फ नाम dtype की करने की तुलना द्वारा एक dtype जांच कर सकते हैं:

df.x.dtype == 'float64' 
Out[21]: True 

लेकिन यह जांचने की कोशिश करते समय काम नहीं लगता है कि x कॉलम स्पष्ट है:

df.x.dtype == 'category' 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-22-94d2608815c4> in <module>() 
----> 1 df.x.dtype == 'category' 

TypeError: data type "category" not understood 

वहाँ में पांडा v0.15 + चेकों के इन प्रकार करने के लिए कोई रास्ता नहीं है?

+4

, का चयन करने के लिए कॉलम> = 0.15.0 canoncial तरह से '' ' – Jeff

+0

यह शायद करने के लिए है' df.select_dtypes (= [ 'श्रेणी'] शामिल हैं) तथ्य टी के साथ टोपी 'श्रेणी' एक डेटा प्रकार है जो पांडा द्वारा जोड़ा गया है, अन्य डेटा प्रकारों की तुलना में जो numpy से आता है। –

उत्तर

20

, बजाय तुलना करने के लिए name गुण का उपयोग यह हमेशा क्योंकि यह सिर्फ एक स्ट्रिंग है काम करना चाहिए:

>>> import numpy as np 
>>> arr = np.array([1, 2, 3, 4]) 
>>> arr.dtype.name 
'int64' 

>>> import pandas as pd 
>>> cat = pd.Categorical(['a', 'b', 'c']) 
>>> cat.dtype.name 
'category' 

तो, योग करने के लिए, आप एक साधारण के साथ समाप्त कर सकते हैं, सीधा समारोह:

def is_categorical(array_like): 
    return array_like.dtype.name == 'category' 
तो एक तरफ नीचे solns से
9

कुछ तरीके हैं। सबसे पहले, dtype की स्ट्रिंग रेपर 'श्रेणी' न कि 'स्पष्ट' है, इसलिए इस काम करता है:

In [41]: df.cat_column.dtype == 'category' 
Out[41]: True 

लेकिन वास्तव में, जैसा कि आप नोटिस, इस तुलना, अन्य dtypes के लिए एक लेखन त्रुटि देता है ताकि आप के लिए होनी चाहिए इसे उपयोग करने के लिए इसे try .. except .. ब्लॉक में लपेटें। पांडा internals का उपयोग कर जांच करने के लिए


अन्य तरीके:

In [42]: isinstance(df.cat_column.dtype, pd.core.common.CategoricalDtype) 
Out[42]: True 

In [43]: pd.core.common.is_categorical_dtype(df.cat_column) 
Out[43]: True 

उन त्रुटि नहीं है, लेकिन सिर्फ गैर स्पष्ट स्तंभों के लिए झूठी दे। उदाहरण के लिए:

In [44]: pd.core.common.is_categorical_dtype(df.x) 
Out[44]: False 
संबंधित मुद्दे