パンダのdtype( 'O')とは何ですか?


105

パンダにデータフレームがあり、その値のタイプが何であるかを理解しようとしています。カラムのタイプがわかりません'Test'。しかし、を実行するとmyFrame['Test'].dtype、次のようになります。

dtype('O')

これは何を意味するのでしょうか?


9
pandasobject列に混合値(文字列、数値、nan)が含まれている場合、自由にdtypeを使用します。
hpaulj 2016年

@quantこれは、私の回答で
prosti

回答:


106

その意味は:

'O'     (Python) objects

ソース

最初の文字はデータの種類を指定し、残りの文字はアイテムごとのバイト数を指定します。ただし、Unicodeは文字数として解釈されます。アイテムのサイズは既存のタイプに対応している必要があります。一致していない場合、エラーが発生します。サポートされている種類は既存の種類に対するものです。そうでない場合、エラーが発生します。サポートされている種類は次のとおりです。

'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)

チェックが必要な場合は、別の回答が役立ちますtype


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')Pythonのタイプ文字列であるパンダまたはパンダオブジェクトとして解釈することができ、これはNumpy string_またはunicode_タイプに対応します。

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

Don Quixoteがお尻にあるように、PandasもNumpyにあり、Numpyはシステムの基本的なアーキテクチャを理解しており、そのためにクラスnumpy.dtypeを使用しています。

データ型オブジェクトは、次のようnumpy.dtypeデータ型をより正確に理解するクラスのインスタンスです。

  • データのタイプ(整数、浮動小数点、Pythonオブジェクトなど)
  • データのサイズ(整数などのバイト数)
  • データのバイト順(リトルエンディアンまたはビッグエンディアン)
  • データ型が構造化されている場合、他のデータ型の集約(たとえば、整数と浮動小数点で構成される配列項目を記述)
  • 構造の「フィールド」の名前は何ですか
  • 各フィールドのデータ型は何ですか
  • 各フィールドがメモリブロックのどの部分をとるか
  • データ型がサブ配列の場合、その形状とデータ型は何ですか

この質問のコンテキストではdtype、pandsとnumpyの両方に属し、特に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

これは「Pythonオブジェクト」を意味します。つまり、numpyがサポートする組み込みスカラー型の1つではありません。

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

6

「O」はオブジェクトを表します

#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')

printステートメントを含む行は次を返します。 object

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.