मुझे पंडों में संख्यात्मक कॉलम कैसे मिलते हैं?


121

मान लीजिए कि dfएक पांडा डेटाफ़्रेम है। मैं संख्यात्मक प्रकार के सभी स्तंभों को खोजना चाहूंगा। कुछ इस तरह:

isNumeric = is_numeric(df)

आप यह निर्दिष्ट करना चाहिए कि क्या एक स्तंभ है कि dtypeकिया जा रहा है object, लेकिन सभी तत्वों सांख्यिक किया जा रहा है, आंकिक या नहीं के रूप में गिना जाता है। यदि नहीं, तो हनन का जवाब लें, क्योंकि यह भी तेज है। नहीं तो मेरा लो।
फुआबर

यदि आप केवल df.describe () कॉलम का उपयोग करते हैं तो क्या होता है। फिर इसे एक वैरिएबल पर असाइन करें।
9

जवाबों:


146

आप select_dtypesDataFrame की विधि का उपयोग कर सकते हैं । इसमें दो पैरामीटर शामिल हैं और शामिल नहीं हैं। तो न्यूमेरिक की तरह दिखेगा:

numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']

newdf = df.select_dtypes(include=numerics)

94
यदि आप 'अंक' सूची को निर्दिष्ट करने की आवश्यकता नहीं है, तो आप df.select_dtypes (= = np.number शामिल करें) का उपयोग कर सकते हैं
KieranPC

23
पिछली टिप्पणी (+1) में टिप पर बिल्डिंग, आप सिर्फ list(df.select_dtypes(include=[np.number]).columns.values) संख्यात्मक कॉलम के नामों की एक सूची प्राप्त करने के लिए उपयोग कर सकते हैं
user799188

76

आप _get_numeric_data()केवल संख्यात्मक स्तंभों को फ़िल्टर करने के लिए undocumented फ़ंक्शन का उपयोग कर सकते हैं:

df._get_numeric_data()

उदाहरण:

In [32]: data
Out[32]:
   A  B
0  1  s
1  2  s
2  3  s
3  4  s

In [33]: data._get_numeric_data()
Out[33]:
   A
0  1
1  2
2  3
3  4

ध्यान दें कि यह एक "निजी पद्धति" (यानी, एक कार्यान्वयन विवरण) है और भविष्य में परिवर्तन या कुल निष्कासन के अधीन है। सावधानी के साथ प्रयोग करें


1
सुपर काम; क्या यह कहीं भी प्रलेखित है? भविष्य के संस्करणों और / या अस्थिरता में गायब होने के बारे में चिंतित है, क्योंकि इसके उपसर्ग अंडरस्कोर इंगित करता है कि यह निजी होना है।
इज़ोफ

3
नहीं, यह कहीं भी प्रलेखित नहीं है। कार्यान्वयन यहाँ है , हालाँकि, @ijoseph के उल्लेख के अनुसार, मैं उन तरीकों का उपयोग करने से सावधान रहूँगा जो अंडरस्कोर से शुरू होते हैं क्योंकि वे कार्यान्वयन विवरण से बहुत कम हैं। इसके अलावा वस्तुतः किसी अन्य उत्तर का उपयोग करें।
cs95

बिल्कुल सही। एक सर्वोत्तम अभ्यास के रूप में मैं संभव के रूप में कई सुन्न तरीकों का उपयोग करने और परिवर्तित करने का प्रयास करता हूं। यह पांडा की गतिशीलता के कारण है। एपीआई अक्सर बदलता है। अनिर्दिष्ट तरीकों के लिए यह सिर्फ सादा लापरवाह है, चाहे वह कितना भी उपयोगी क्यों न हो।
मिक

69

केवल संख्यात्मक कॉलम के साथ एक नया डेटाफ्रेम बनाने के लिए सरल एक-लाइन उत्तर:

df.select_dtypes(include=np.number)

यदि आप संख्यात्मक कॉलम के नाम चाहते हैं:

df.select_dtypes(include=np.number).columns.tolist()

पूरा कोड:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': range(7, 10),
                   'B': np.random.rand(3),
                   'C': ['foo','bar','baz'],
                   'D': ['who','what','when']})
df
#    A         B    C     D
# 0  7  0.704021  foo   who
# 1  8  0.264025  bar  what
# 2  9  0.230671  baz  when

df_numerics_only = df.select_dtypes(include=np.number)
df_numerics_only
#    A         B
# 0  7  0.704021
# 1  8  0.264025
# 2  9  0.230671

colnames_numerics_only = df.select_dtypes(include=np.number).columns.tolist()
colnames_numerics_only
# ['A', 'B']

2
df.select_dtypes(include=['int64']).columns.tolist()
चेरी वू

यदि आप केवल एक प्रकार चाहते हैं, तो आपको इसे किसी सूची में संग्रहीत करने की आवश्यकता नहीं है। न ही आपको निर्दिष्ट करने की आवश्यकता है include=select_dtypes(np.number)
बॉलपॉइंटबैन

यदि आपके कॉलम में संख्यात्मक डेटा है, लेकिन कोई भी नहीं है, तो dtype 'ऑब्जेक्ट' हो सकता है। यह कॉलम को न्यूमेरिक कर देगा:df.fillna(value=0, inplace=True)
vaughnkoch

26
df.select_dtypes(exclude=['object'])

7
डेटाइम कॉलम एक अलग प्रकार के datetimeहोते हैं, जो संख्यात्मक प्रकार नहीं होते हैं
जेरु ल्यूक

15

सरल एक-लाइनर:

df.select_dtypes('number').columns

2
अब तक का सबसे पाइथोनिक तरीका है, हाँ।
jorijnsmit

6

निम्नलिखित कोड एक डेटा सेट के संख्यात्मक कॉलम के नामों की सूची लौटाएंगे।

cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)

यहां marketing_trainमेरा डेटा सेट है और select_dtypes()बहिष्करण का उपयोग करके डेटा प्रकारों का चयन करने के लिए फ़ंक्शन है और इसमें तर्कों को शामिल किया गया है और कॉलम का उपयोग उपरोक्त कोड के डेटा सेट आउटपुट के कॉलम नाम को प्राप्त करने के लिए किया जाता है:

['custAge',
     'campaign',
     'pdays',
     'previous',
     'emp.var.rate',
     'cons.price.idx',
     'cons.conf.idx',
     'euribor3m',
     'nr.employed',
     'pmonths',
     'pastEmail']

धन्यवाद


4

पंडों के डेटा फ्रेम में संख्यात्मक कॉलम खोजने के लिए यह एक और सरल कोड है,

numeric_clmns = df.dtypes[df.dtypes != "object"].index 

1
def is_type(df, baseType):
    import numpy as np
    import pandas as pd
    test = [issubclass(np.dtype(d).type, baseType) for d in df.dtypes]
    return pd.DataFrame(data = test, index = df.columns, columns = ["test"])
def is_float(df):
    import numpy as np
    return is_type(df, np.float)
def is_number(df):
    import numpy as np
    return is_type(df, np.number)
def is_integer(df):
    import numpy as np
    return is_type(df, np.integer)

1

इस उत्तर को अपनाने से आप कर सकते हैं

df.ix[:,df.applymap(np.isreal).all(axis=0)]

यहां, यह np.applymap(np.isreal)दर्शाता है कि क्या डेटा फ़्रेम में प्रत्येक सेल संख्यात्मक है, और यह .axis(all=0)जांचता है कि क्या स्तंभ के सभी मान सत्य हैं और बूलियंस की एक श्रृंखला लौटाता है जिसका उपयोग वांछित कॉलमों को अनुक्रमित करने के लिए किया जा सकता है।


1

कृपया नीचे कोड देखें:

if(dataset.select_dtypes(include=[np.number]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.number]).describe())
if(dataset.select_dtypes(include=[np.object]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.object]).describe())

इस तरह आप जाँच सकते हैं कि मान सांख्यिक हैं जैसे फ्लोट और इंट या श्रिंग मान। दूसरा यदि कथन का उपयोग स्ट्रिंग मानों की जांच के लिए किया जाता है जो ऑब्जेक्ट द्वारा संदर्भित किया जाता है।


1

हम नीचे दिए अनुसार आवश्यकता के अनुसार डेटा प्रकारों को शामिल और बाहर कर सकते हैं:

train.select_dtypes(include=None, exclude=None)
train.select_dtypes(include='number') #will include all the numeric types

जुपिटर नोटबुक से संदर्भित।

सभी संख्यात्मक प्रकारों का चयन करने के लिए , का उपयोग करें np.numberया'number'

  • स्ट्रिंग्स का चयन करने के लिए आपको objectdtype का उपयोग करना होगा लेकिन ध्यान दें कि यह सभी ऑब्जेक्ट dtype कॉलम वापस कर देगा

  • NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>__ देखें

  • डेटासेटाइम का चयन करने के लिए, का उपयोग करें np.datetime64, 'datetime'या 'datetime64'

  • समय-काल का चयन करने के लिए, का उपयोग करें np.timedelta64, 'timedelta'या 'timedelta64'

  • पंडों श्रेणीगत dtypes का चयन करने के लिए, का उपयोग करें 'category'

  • पंडों डेटेटिमेट्ज़ डीटिप्स का चयन करने के लिए, 'datetimetz'(0.20.0 में नया) या `` डेटाटाइम 64 [एनएस, टीज़] का उपयोग करें

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