पंडों में dtype ('O') क्या है?


106

मेरे पास पंडों में एक डेटाफ्रेम है और मैं यह पता लगाने की कोशिश कर रहा हूं कि इसके मूल्य क्या हैं। मैं अनिश्चित हूं कि स्तंभ का प्रकार क्या है 'Test'। हालाँकि, जब मैं दौड़ता myFrame['Test'].dtypeहूं, मुझे मिलता है;

dtype('O')

इसका क्या मतलब है?


9
pandasस्वतंत्र रूप से objectdtype का उपयोग करता है जब स्तंभों में मिश्रित मान (स्ट्रिंग्स, संख्या, नैन) होते हैं।
हंपुलज

@ इसका अर्थ है पांडा स्ट्रिंग जैसे मैंने अपने उत्तर
prosti

जवाबों:


107

इसका मतलब:

'O'     (Python) objects

स्रोत

पहला वर्ण डेटा के प्रकार को निर्दिष्ट करता है और शेष वर्ण यूनिकोड को छोड़कर प्रति आइटम बाइट की संख्या निर्दिष्ट करता है, जहां इसे वर्णों की संख्या के रूप में व्याख्या की जाती है। आइटम का आकार मौजूदा प्रकार के अनुरूप होना चाहिए, या एक त्रुटि उठाई जाएगी। समर्थित प्रकार मौजूदा प्रकार के हैं, या कोई त्रुटि उठाई जाएगी। समर्थित प्रकार हैं:

'b'       boolean
'i'       (signed) integer
'u'       unsigned integer
'f'       floating-point
'c'       complex-floating point
'O'       (Python) objects
'S', 'a'  (byte-)string
'U'       Unicode
'V'       raw data (void)

एक और जवाब अगर चेक types की जरूरत है ।


19

जब आप dtype('O')डेटाफ्रेम के अंदर देखते हैं तो इसका अर्थ है पंडस स्ट्रिंग।

क्या है dtype?

कुछ है जो pandasया numpy, या दोनों, या कुछ और से संबंधित है? यदि हम पांडा कोड की जांच करते हैं:

df = pd.DataFrame({'float': [1.0],
                    'int': [1],
                    'datetime': [pd.Timestamp('20180310')],
                    'string': ['foo']})
print(df)
print(df['float'].dtype,df['int'].dtype,df['datetime'].dtype,df['string'].dtype)
df['string'].dtype

यह इस तरह उत्पादन होगा:

   float  int   datetime string    
0    1.0    1 2018-03-10    foo
---
float64 int64 datetime64[ns] object
---
dtype('O')

आप पंडों dtype('O')या पंडों की वस्तु के रूप में अंतिम व्याख्या कर सकते हैं जो पायथन प्रकार की स्ट्रिंग है, और यह नेम्पी string_, या unicode_प्रकारों से मेल खाती है ।

Pandas dtype    Python type     NumPy type          Usage
object          str             string_, unicode_   Text

जैसे डॉन क्विक्सोट गधे पर है, पंडास नेम्पी पर है और नम्पी आपके सिस्टम की अंतर्निहित वास्तुकला को समझते हैं और उसके लिए कक्षा का उपयोग करते हैं numpy.dtype

डेटा प्रकार ऑब्जेक्ट numpy.dtypeवर्ग का एक उदाहरण है, जो डेटा प्रकार को अधिक सटीक समझता है :

  • डेटा का प्रकार (पूर्णांक, फ्लोट, पायथन ऑब्जेक्ट, आदि)
  • डेटा का आकार (कितने बाइट्स उदाहरण के लिए पूर्णांक है)
  • डेटा का बाइट क्रम (छोटा-एंडियन या बड़ा-एंडियन)
  • यदि डेटा प्रकार संरचित है, तो अन्य डेटा प्रकारों का एक कुल (उदाहरण के लिए, एक पूर्णांक और एक फ्लोट से मिलकर एक सरणी आइटम का वर्णन)
  • संरचना के "फ़ील्ड" के नाम क्या हैं
  • प्रत्येक फ़ील्ड का डेटा-प्रकार क्या है
  • मेमोरी का कौन सा भाग प्रत्येक फ़ील्ड को ब्लॉक करता है
  • यदि डेटा प्रकार एक उप-सरणी है, तो इसका आकार और डेटा प्रकार क्या है

इस सवाल के संदर्भ में dtypeदोनों तालाब और सुन्न के हैं और विशेष रूप से dtype('O')हम स्ट्रिंग की उम्मीद करते हैं।


स्पष्टीकरण के साथ परीक्षण के लिए यहां कुछ कोड दिया गया है: यदि हमारे पास शब्दकोश के रूप में डेटासेट है

import pandas as pd
import numpy as np
from pandas import Timestamp

data={'id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'date': {0: Timestamp('2018-12-12 00:00:00'), 1: Timestamp('2018-12-12 00:00:00'), 2: Timestamp('2018-12-12 00:00:00'), 3: Timestamp('2018-12-12 00:00:00'), 4: Timestamp('2018-12-12 00:00:00')}, 'role': {0: 'Support', 1: 'Marketing', 2: 'Business Development', 3: 'Sales', 4: 'Engineering'}, 'num': {0: 123, 1: 234, 2: 345, 3: 456, 4: 567}, 'fnum': {0: 3.14, 1: 2.14, 2: -0.14, 3: 41.3, 4: 3.14}}
df = pd.DataFrame.from_dict(data) #now we have a dataframe

print(df)
print(df.dtypes)

अंतिम पंक्तियाँ डेटाफ़्रेम की जाँच करेंगी और आउटपुट को नोट करेंगी:

   id       date                  role  num   fnum
0   1 2018-12-12               Support  123   3.14
1   2 2018-12-12             Marketing  234   2.14
2   3 2018-12-12  Business Development  345  -0.14
3   4 2018-12-12                 Sales  456  41.30
4   5 2018-12-12           Engineering  567   3.14
id               int64
date    datetime64[ns]
role            object
num              int64
fnum           float64
dtype: object

हर तरह का अलग dtypes

df.iloc[1,:] = np.nan
df.iloc[2,:] = None

लेकिन अगर हम सेट करने की कोशिश करते हैं np.nanया Noneयह मूल कॉलम dtype को प्रभावित नहीं करेगा। आउटपुट इस तरह होगा:

print(df)
print(df.dtypes)

    id       date         role    num   fnum
0  1.0 2018-12-12      Support  123.0   3.14
1  NaN        NaT          NaN    NaN    NaN
2  NaN        NaT         None    NaN    NaN
3  4.0 2018-12-12        Sales  456.0  41.30
4  5.0 2018-12-12  Engineering  567.0   3.14
id             float64
date    datetime64[ns]
role            object
num            float64
fnum           float64
dtype: object

इसलिए np.nanया Noneकॉलम dtypeको तब तक नहीं बदला जाएगा , जब तक हम सभी कॉलम पंक्तियों को np.nanया तो सेट नहीं कर देते None। उस स्थिति में कॉलम क्रमशः float64या बन जाएगा object

आप एकल पंक्तियों को सेट करने का भी प्रयास कर सकते हैं:

df.iloc[3,:] = 0 # will convert datetime to object only
df.iloc[4,:] = '' # will convert all columns to object

और यहां ध्यान देने के लिए, अगर हम स्ट्रिंग को एक गैर स्ट्रिंग कॉलम के अंदर सेट करते हैं तो यह स्ट्रिंग या ऑब्जेक्ट बन जाएगा dtype


14

इसका अर्थ है "एक अजगर वस्तु", अर्थात सुन्न द्वारा समर्थित बिलिन स्केलर प्रकारों में से एक नहीं।

np.array([object()]).dtype
=> dtype('O')

6

। ओ ’का अर्थ है वस्तु

#Loading a csv file as a dataframe
import pandas as pd 
train_df = pd.read_csv('train.csv')
col_name = 'Name of Employee'

#Checking the datatype of column name
train_df[col_name].dtype

#Instead try printing the same thing
print train_df[col_name].dtype

पहली पंक्ति लौटती है: dtype('O')

प्रिंट स्टेटमेंट वाली लाइन निम्नलिखित है: object

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