डेटा प्रकार के आधार पर पांडा डेटाफ्रेम कॉलम की सूची प्राप्त करें


184

यदि मेरे पास निम्नलिखित कॉलम के साथ डेटाफ्रेम है:

1. NAME                                     object
2. On_Time                                      object
3. On_Budget                                    object
4. %actual_hr                                  float64
5. Baseline Start Date                  datetime64[ns]
6. Forecast Start Date                  datetime64[ns] 

मैं कहना चाहूंगा: यहां एक डेटाफ्रेम है, मुझे उन कॉलमों की एक सूची दें, जो टाइप ऑब्जेक्ट या टाइप डेटाइम के हैं?

मेरे पास एक फ़ंक्शन है जो संख्या (फ़्लोट 64) को दो दशमलव स्थानों में परिवर्तित करता है, और मैं डेटाफ़्रेम कॉलम की इस सूची का उपयोग किसी विशेष प्रकार का करना चाहूंगा, और इस फ़ंक्शन के माध्यम से उन सभी को 2dp में परिवर्तित करने के लिए चलाऊंगा।

शायद:

For c in col_list: if c.dtype = "Something"
list[]
List.append(c)?

4
जब मैं इस सवाल पर आया था, तो मैं शीर्ष में बिल्कुल सूची बनाने का एक तरीका ढूंढ रहा था। df.dtypesक्या वो।
मार्टिन थोमा

प्रत्येक कॉलम के भीतर सभी ऑब्जेक्ट प्रकारों को खोजने के तरीके पर आगंतुकों को इस अलग लेकिन संबंधित प्रश्न में रुचि हो सकती है : मैं पांडा ऑब्जेक्ट कॉलम में उपप्रकारों का पता कैसे लगा सकता हूं?
जेपी

जवाबों:


314

यदि आप एक निश्चित प्रकार के स्तंभों की सूची चाहते हैं, तो आप इसका उपयोग कर सकते हैं groupby:

>>> df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE"))
>>> df
   A       B  C  D   E
0  1  2.3456  c  d  78

[1 rows x 5 columns]
>>> df.dtypes
A      int64
B    float64
C     object
D     object
E      int64
dtype: object
>>> g = df.columns.to_series().groupby(df.dtypes).groups
>>> g
{dtype('int64'): ['A', 'E'], dtype('float64'): ['B'], dtype('O'): ['C', 'D']}
>>> {k.name: v for k, v in g.items()}
{'object': ['C', 'D'], 'int64': ['A', 'E'], 'float64': ['B']}

5
यह डेटा गुणवत्ता जाँच के रूप में उपयोगी है, जहाँ कोई यह सुनिश्चित करता है कि स्तंभ उस प्रकार के हों, जिसकी अपेक्षा की जाती है।
NYCeyes

2
यह काम नहीं करता है यदि आपके सभी डेटाफ़्रेम कॉलम objectउनके वास्तविक सामग्री की परवाह किए बिना वापस लौट रहे हैं
user5359531

2
@ user5359531 इसका मतलब यह नहीं है कि यह काम नहीं कर रहा है, इसका मतलब यह है कि आपके DataFrame कॉलम उस प्रकार के लिए नहीं डाले गए हैं जो आपको लगता है कि उन्हें होना चाहिए, जो कई कारणों से हो सकता है।
मार्क

6
यदि आप डेटा प्रकार से सिर्फ कॉलम का चयन कर रहे हैं, तो यह उत्तर अप्रचलित है। select_dtypesइसके बजाय का उपयोग करें
टेड पेट्रो

आप इस समूहीकृत डेटाफ़्रेम को बाद में कैसे अनुक्रमित करेंगे?
एलन वांग

110

पांडा v0.14.1 के रूप में, आप select_dtypes()dtype द्वारा स्तंभों का चयन करने के लिए उपयोग कर सकते हैं

In [2]: df = pd.DataFrame({'NAME': list('abcdef'),
    'On_Time': [True, False] * 3,
    'On_Budget': [False, True] * 3})

In [3]: df.select_dtypes(include=['bool'])
Out[3]:
  On_Budget On_Time
0     False    True
1      True   False
2     False    True
3      True   False
4     False    True
5      True   False

In [4]: mylist = list(df.select_dtypes(include=['bool']).columns)

In [5]: mylist
Out[5]: ['On_Budget', 'On_Time']

35

उपयोग करने dtypeसे आपको वांछित कॉलम का डेटा प्रकार मिलेगा:

dataframe['column1'].dtype

यदि आप एक साथ सभी कॉलम के डेटा प्रकार जानना चाहते हैं , तो आप dtypes के dtypeरूप में बहुवचन का उपयोग कर सकते हैं :

dataframe.dtypes

1
यह स्वीकृत उत्तर होना चाहिए, यह डेटा प्रकारों को लगभग उसी प्रारूप में प्रिंट करता है जो ओपी चाहता है।
अभिषेक दिवेकर

1
df.select_dtypes(include=['Object','DateTime']).columnsनीचे दिए गए चर्चा के अनुसार उदाहरण के लिए केवल विशिष्ट डेटा
टाइप को

29

आप dtypes विशेषता पर बूलियन मास्क का उपयोग कर सकते हैं:

In [11]: df = pd.DataFrame([[1, 2.3456, 'c']])

In [12]: df.dtypes
Out[12]: 
0      int64
1    float64
2     object
dtype: object

In [13]: msk = df.dtypes == np.float64  # or object, etc.

In [14]: msk
Out[14]: 
0    False
1     True
2    False
dtype: bool

आप वांछित dtype वाले उन कॉलमों को देख सकते हैं:

In [15]: df.loc[:, msk]
Out[15]: 
        1
0  2.3456

अब आप राउंड (या जो भी) का उपयोग कर सकते हैं और इसे वापस असाइन कर सकते हैं:

In [16]: np.round(df.loc[:, msk], 2)
Out[16]: 
      1
0  2.35

In [17]: df.loc[:, msk] = np.round(df.loc[:, msk], 2)

In [18]: df
Out[18]: 
   0     1  2
0  1  2.35  c

मैं एक फ़ंक्शन लिखने में सक्षम होना चाहता हूं, जो डेटाफ़्रेम के नाम पर लेता है, और फिर सूचियों का एक शब्दकोश लौटाता है, जिसमें शब्दकोश कुंजी डेटाटाइप और मूल्य डेटाफ़्रेम से स्तंभों की सूची होने के साथ होती है। डाटा प्रकार।
योशिसेरी

def col_types (x, pd):
itthrill


7

डिफ़ॉल्ट रूप से, df.info(verbose=True)जहां dfपंडों का डेटाफ़ार्म है, उसका उपयोग करेंverbose=False


यदि टेबल बड़ी है तो मेमोरी इश्यू हो सकते हैं
कू

4

सबसे निश्चित तरीके से कुछ dtype के कॉलम की एक सूची प्राप्त करने के लिए जैसे 'ऑब्जेक्ट':

df.select_dtypes(include='object').columns

उदाहरण के लिए:

>>df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE"))
>>df.dtypes

A      int64
B    float64
C     object
D     object
E      int64
dtype: object

सभी 'ऑब्जेक्ट' dtype कॉलम प्राप्त करने के लिए:

>>df.select_dtypes(include='object').columns

Index(['C', 'D'], dtype='object')

सिर्फ सूची के लिए:

>>list(df.select_dtypes(include='object').columns)

['C', 'D']   

3

यदि आप केवल उसी वस्तु कॉलम की सूची चाहते हैं जो आप कर सकते हैं:

non_numerics = [x for x in df.columns \
                if not (df[x].dtype == np.float64 \
                        or df[x].dtype == np.int64)]

और फिर यदि आप केवल अंकज्योतिष की एक और सूची प्राप्त करना चाहते हैं:

numerics = [x for x in df.columns if x not in non_numerics]

0

मैं इस तीन लाइनर के साथ आया था

अनिवार्य रूप से, यहां यह बताया गया है:

  1. कॉलम के नाम और उनके संबंधित डेटा प्रकार प्राप्त करें।
  2. मैं वैकल्पिक रूप से इसे csv पर आउटपुट कर रहा हूं।

inp = pd.read_csv('filename.csv') # read input. Add read_csv arguments as needed
columns = pd.DataFrame({'column_names': inp.columns, 'datatypes': inp.dtypes})
columns.to_csv(inp+'columns_list.csv', encoding='utf-8') # encoding is optional

इसने मक्खी पर स्कीमा उत्पन्न करने की कोशिश में मेरे जीवन को बहुत आसान बना दिया । उम्मीद है की यह मदद करेगा


0

योशिसेरी के लिए;

def col_types(x,pd):
    dtypes=x.dtypes
    dtypes_col=dtypes.index
    dtypes_type=dtypes.value
    column_types=dict(zip(dtypes_col,dtypes_type))
    return column_types

0

मैं infer_objects () का उपयोग करता हूं

Docstring: ऑब्जेक्ट कॉलम के लिए बेहतर dtypes का अनुमान लगाने का प्रयास।

गैर-ऑब्जेक्ट और अपरिवर्तनीय कॉलम को अपरिवर्तित छोड़ते हुए, ऑब्जेक्ट-डीटीपी कॉलम के नरम रूपांतरण का प्रयास करता है। सामान्य श्रृंखला / DataFrame निर्माण के दौरान इंट्रेंस नियम समान हैं।

df.infer_objects().dtypes

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.