いくつかのデータをpandas DataFrameに持ち込み、インポート時に各列にdtypesを割り当てたいと思います。例:
_myarray = np.random.randint(0,5,size=(2,2))
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype=[float,int])
mydf.dtypes
_
結果:
TypeError:データ型が理解できません
私は次のような他のいくつかの方法を試しました:
_mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': int})
_
TypeError:タイプ 'type'のオブジェクトにはlen()がありません
dtype=(float,int)
を配置すると、両方の列にfloat形式が適用されます。
最後に、列名のリストを渡すのと同じ方法で、データ型のリストを渡すことができるようにしたいと思います。
pandasバージョン0.24.2(現在の安定版リリース)の時点で、ドキュメントの状態としてDataFrameコンストラクターにデータ型の明示的なリストを渡すことはできません。
dtype : dtype, default None
Data type to force. Only a single dtype is allowed. If None, infer
ただし、データフレームクラスには静的メソッドがあり、numpy構造化配列をデータフレームに変換できるため、次のことが可能になります。
>>> myarray = np.random.randint(0,5,size=(2,2))
>>> record = np.array(map(Tuple,myarray),dtype=[('a',np.float),('b',np.int)])
>>> mydf = pd.DataFrame.from_records(record)
>>> mydf.dtypes
a float64
b int64
dtype: object
私はこれに遭遇しましたが、pandasの問題はまだ開いているので、回避策を投稿しています。df
が私のDataFrameであり、dtype
が列名を型にマッピングするdict:
_for k, v in dtype.items():
df[k] = df[k].astype(v)
_
(注:python 2)でdtype.iteritems()
を使用してください)
参考のために:
dtypes
): https://docs.scipy.org/doc/numpy-1.12.0/reference/arrays.dtypes.htmlcategory
: http://pandas.pydata.org/pandas-docs/stable/categorical.htmlSeries
オブジェクトのディクショナリをDataFrame
コンストラクターに渡すことをお勧めします-作成をより具体的に制御できるようになります。テンプレートバージョン(data1
は配列などです。):
df = pd.DataFrame({'column1':pd.Series(data1, dtype='type1'),
'column2':pd.Series(data2, dtype='type2')})
データの例:
df = pd.DataFrame({'A':pd.Series([1,2,3], dtype='int'),
'B':pd.Series([7,8,9], dtype='float')})
print (df)
A B
0 1 7.0
1 2 8.0
2 3 9.0
print (df.dtypes)
A int32
B float64
dtype: object
データ型を操作している間は、文字列として渡す必要があります。
たとえば、従った後者の方法は次のように変更する必要があります
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': **'int'**})
の代わりに
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': **int**})
。
dtype (int, float etc.)
は文字列として指定する必要があります。
または、代替方法として(文字列として渡したくない場合)numpyをnpとしてインポートを使用し、mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': **np.int**})
を使用します