【Python・pandas】データ分析で文字列を数値(int)に変換・置き換える方法
はじめに
データ分析を行っていると、文字列を数値(int型/float型)に変換したい場面によく出会います。各文字列に対して一意の整数値を割り当てれば、カテゴリごとの文字列の値を簡単に区別できるようになります。
ここでは、カンマ区切り(CSV)形式のデータを使用します。次のようなCSVデータが入ったExcelファイルがあるとしましょう。
| 企業名 | 業種 | 投資判断 |
|---|---|---|
| HDFC Bank | 金融 | ホールド |
| Apollo | ヘルスケア | 買い |
| Hero | 自動車 | アンダーパフォーム |
| Yes Bank | 金融 | ホールド |
| M&M | 自動車 | アンダーパフォーム |
| Fortis | ヘルスケア | 買い |
| Maruti | 自動車 | アンダーパフォーム |
上記は大きなデータセットのごく一部ですが、「買い」「ホールド」「アンダーパフォーム」といった投資判断ごとに異なる整数値を割り当て、メタデータと紐付けたいケースはよくあります。この入力に対して期待される出力は、次のようになります。
| 企業名 | 業種 | 投資判断 |
|---|---|---|
| HDFC Bank | 金融 | 2 |
| Apollo | ヘルスケア | 1 |
| Hero | 自動車 | 3 |
| Yes Bank | 金融 | 2 |
| M&M | 自動車 | 3 |
| Fortis | ヘルスケア | 1 |
| Maruti | 自動車 | 3 |
それでは、文字列の列の値を整数に置き換える具体的な方法を見ていきましょう。
方法1:辞書を使って文字列を整数に置き換える
# 必要なライブラリをインポート
import pandas as pd
# pandasのread_csv()でCSVファイルをPythonに読み込む
dataframe = pd.read_csv("data_pandas1.csv")
# キー=元の値(文字列)、値=新しい値(整数)となる辞書を作成
Recommendation = {'Buy': 1, 'Hold': 2, 'Underperform': 3}
# 辞書のキーと値のペアをもとに、列の値を置き換える
dataframe.Recommendation = [Recommendation[item] for item in dataframe.Recommendation]
# 新しいテーブルを表示
print(dataframe)
実行結果
Company Industry Recommendation 0 HDFC Bank Finance 2 1 Apollo Healthcare 1 2 Hero Automobile 3 3 Yes Bank Finance 2 4 M&M Automobile 3 5 Fortis Healthcare 1 6 Maruti Automobile 3
「Buy」が1、「Hold」が2、「Underperform」が3に正しく置き換わっていることが確認できます。
方法2:条件分岐で直接値を代入する
先ほどのコードは、辞書を扱わずに、条件が一致した列のセルに別の値を直接代入する形でも書けます。
# 必要なライブラリをインポート
import pandas as pd
# pandasのread_csv()でCSVファイルをPythonに読み込む
dataf = pd.read_csv("data_pandas1.csv")
# 条件が一致した場合に、Recommendation列の各セルへ
# 直接整数値を代入します。
# 例:データフレームのrecommendation列が "Buy" なら整数 1 を代入
dataf.Recommendation[data.Recommendation == 'Buy'] = 1
dataf.Recommendation[data.Recommendation == 'Hold'] = 2
dataf.Recommendation[data.Recommendation == 'Underperform'] = 3
print(dataf)
実行結果
Company Industry Recommendation 0 HDFC Bank Finance 2 1 Apollo Healthcare 1 2 Hero Automobile 3 3 Yes Bank Finance 2 4 M&M Automobile 3 5 Fortis Healthcare 1 6 Maruti Automobile 3
補足:map()メソッドを使うとより簡潔に書ける
現在のpandasでは、map()メソッドを使うのが最もシンプルで推奨される方法です。辞書を用意すれば、わずか1行で置き換えが完了します。
Recommendation = {'Buy': 1, 'Hold': 2, 'Underperform': 3}
dataframe['Recommendation'] = dataframe['Recommendation'].map(Recommendation)
なお、方法2のような条件による代入(チェーンインデックス)は、比較的新しいバージョンのpandasでは「SettingWithCopyWarning」という警告が出る場合があります。実務での開発では、map()やreplace()メソッドの利用をおすすめします。
まとめ
本記事では、CSV形式のテーブル内の文字列データを整数値に置き換える方法を複数紹介しました。「買い」「ホールド」のようなカテゴリカルなデータを機械学習モデルに入力したり、集計・統計処理を行ったりする際には、文字列から数値への変換が必要になる場面が数多くあります。状況に応じて、辞書+リスト内包表記、条件による代入、map()メソッドを使い分けてみてください。
-
Pythonによるデータ分析と可視化入門|pandasの基本を徹底解説
Pythonによるデータ分析と可視化の概要 Pythonには、データ分析と可視化のための強力なライブラリが数多く用意されています。代表的なものとしては、NumPy、pandas、matplotlib、seabornなどが挙げられます。本記事では、その中でも中心的な役割を果たすpandasについて詳しく解説します。pandasはNumPyをベースに構築されたオープンソースライブラリで、高速なデータ分析やデータのクリーニング・前処理を効率的に行えます。さらに、pandas自体にも便利な可視化機能が組み込まれています。 pandasのインストール方法 pandasをインストールするには、ターミナル
-
Pythonで学ぶ探索的データ分析(EDA)の基本と実践
データ分析において、探索的データ分析(Exploratory Data Analysis:EDA)は必ず最初に行うべきステップです。EDAを実施することで、以下のようなことが可能になります。データセットへの深い洞察を得るデータの背後にある構造を理解する重要なパラメータや、それらの間の関係性を抽出する前提となる仮説を検証するサンプルデータセットを使ったEDAの理解PythonでEDAを理解するために、サンプルデータはWebサイトから直接取得するか、ローカルディスクから読み込むことができます。ここでは、公開されているUCI Machine Learning Repositoryから「赤ワインの品質