質問: dtype( 'o')とは何ですか? pandasにデータフレームがあり、その値のタイプが何であるかを把握しようとしています。列'test'のタイプが不明です。ただし、myframe['test'].dtypeを実行すると、取得します。dtype('o') これは何を意味するのでしょうか?
回答: データフレーム内に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クラスのインスタンスです。 データのタイプ(整数、フロート、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 あらゆる種類のdtypesdf.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になります。