pandasにデータフレームがあり、その値のタイプが何であるかを把握しようとしています。列'Test'
のタイプが不明です。ただし、myFrame['Test'].dtype
を実行すると、取得します。
dtype('O')
これは何を意味するのでしょうか?
その意味は:
'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)
別の answer は、type
sを確認する必要がある場合に役立ちます。
これは、「pythonオブジェクト」を意味します。つまり、numpyでサポートされている組み込みスカラー型のいずれでもありません。
np.array([object()]).dtype
=> dtype('O')
「O」はobjectを表します。
#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
dtype('O')
が表示される場合、これはPandas文字列を意味します。dtype
とは何ですか?
pandas
またはnumpy
、あるいはその両方に属するもの、または何か他のものですか? pandasコードを調べると:
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')
最後は、Pandasタイプの文字列であるPandas 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
クラスのインスタンスです。
この質問のコンテキストでは、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
に設定しない限り、np.nan
またはdtype
は列None
を変更しません。その場合、列はそれぞれfloat64
またはobject
になります。
単一の行を設定することもできます:
df.iloc[3,:] = 0 # will convert datetime to object only
df.iloc[4,:] = '' # will convert all columns to object
また、ここで注意するのは、文字列以外の列に文字列を設定すると、文字列またはオブジェクトdtype
になります。