[解決済み] pandasのdataframeでカテゴリデータを変換する
2022-06-14 12:51:58
質問
このようなデータ(列が多すぎる)を持つデータフレームがあります。
col1 int64
col2 int64
col3 category
col4 category
col5 category
カラムはこんな感じです。
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
このように、カラムの値をすべて整数に変換したい。
[1, 2, 3, 4, 5, 6, 7, 8]
1カラムの場合はこれで解決しました。
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
これで、データフレームに2つのカラムができました - old
col3
と新しい
c
を追加し、古いカラムを削除する必要があります。
それは悪い習慣です。それは仕事ですが、私のデータフレームには多くの列があり、私はそれを手動で行うことを望んでいません。
どのようにこのpythonicとちょうど巧妙に行うのですか?
どのように解決するのですか?
まず、Categoricalカラムを数値コードに変換するには、以下のようにすると簡単です。
dataframe['c'].cat.codes
.
さらに、データフレーム内の特定の dtype を持つ全ての列を自動的に選択するために
select_dtypes
. この方法では、複数の列と自動的に選択された列に対して、上記の操作を適用することができます。
まずデータフレームの例を作ります。
In [75]: df = pd.DataFrame({'col1':[1,2,3,4,5], 'col2':list('abcab'), 'col3':list('ababb')})
In [76]: df['col2'] = df['col2'].astype('category')
In [77]: df['col3'] = df['col3'].astype('category')
In [78]: df.dtypes
Out[78]:
col1 int64
col2 category
col3 category
dtype: object
次に
select_dtypes
を使って列を選択し、さらに
.cat.codes
をそれぞれのカラムに適用すると、次のような結果になります。
In [80]: cat_columns = df.select_dtypes(['category']).columns
In [81]: cat_columns
Out[81]: Index([u'col2', u'col3'], dtype='object')
In [83]: df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)
In [84]: df
Out[84]:
col1 col2 col3
0 1 0 0
1 2 1 1
2 3 2 0
3 4 0 1
4 5 1 1
関連
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] 辞書のリストをpandasのDataFrameに変換する
-
[解決済み] Pythonのdictをdataframeに変換する
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonはWordの読み書きの変更操作を実装している
-
python implement mysql add delete check change サンプルコード
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み] データフレーム全体に対するpandas.factorize