私は使用しました
sklearn.preprocessing.OneHotEncoder
一部のデータを変換するために、出力はscipy.sparse.csr.csr_matrix
で、他の列とともに元のデータフレームにマージする方法
pd.concat
を使用しようとしましたが、
TypeError: cannot concatenate a non-NDFrame object
ありがとう
Aがcsr_matrix
の場合、 .toarray()
を使用できます(numpy
matrix
を生成する.todense()
もあります。 DataFrame
コンストラクターの場合):
df = pd.DataFrame(A.toarray())
その後、pd.concat()
でこれを使用できます。
A = csr_matrix([[1, 0, 2], [0, 3, 0]])
(0, 0) 1
(0, 2) 2
(1, 1) 3
<class 'scipy.sparse.csr.csr_matrix'>
pd.DataFrame(A.todense())
0 1 2
0 1 0 2
1 0 3 0
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
0 2 non-null int64
1 2 non-null int64
2 2 non-null int64
バージョン0.20では、pandas
が導入されました スパースデータ構造 、 SparseDataFrame
を含む。
または、スパース行列をsklearn
に渡して、pandas
に戻すときにメモリが不足しないようにすることができます。 numpy
array
をscipy.sparse.csr_matrix
コンストラクターに渡して他のデータをスパース形式に変換し、scipy.sparse.hstack
を使用して結合します( docs を参照)。
エンコーダーを作成するときにパラメーターsparse
をFalse
に設定することで、そもそもスパース行列が戻らないようにすることもできます。
OneHotEncoder 状態のドキュメント:
sparse:ブール値、デフォルト= True
Trueに設定されている場合はスパース行列を返し、そうでない場合は配列を返します。
その後、再びDataFrameコンストラクターを呼び出して、numpy配列をDataFrameに変換できます。