PythonのPandasで文字列にある数値を変換する方法について

Python,イメージ

AI実装検定のご案内

PythonのPandasでは、文字列に含まれている数値を抽出・変換して数値型(intやfloat)に変換するという処理は、データの前処理で非常によく使われるテクニックです。

たとえば「¥1,200」や「約300人」などのように、数字に不要な文字が混じっている場合、それを取り除いて数値として扱う必要があります。

目次

基本的な考え方

PandasのSeries(通常はDataFrameの1列)は、.strアクセサを使うことで文字列処理のメソッドが使えるようになります。

また、str.replace()str.extract()astype()などを組み合わせることで、数値変換が可能です。

例1:単純な文字列→数値変換

import pandas as pd

df = pd.DataFrame({
    'price': ['1000', '2500', '3500']
})

# 文字列をintに変換
df['price'] = df['price'].astype(int)
print(df)

カンマや記号がある場合

df = pd.DataFrame({
    'price': ['1,000円', '2,500円', '3,000円']
})

# カンマと円記号を除去してからintに変換
df['price'] = df['price'].str.replace(',', '').str.replace('円', '').astype(int)
print(df)

str.replace()を使うときは、複数の文字を順に削除可能です。正規表現(regex)も使えます。

数字を含む文字列から数値のみ抽出

df = pd.DataFrame({
    'info': ['約300人', '1500名', '100人程度']
})

# 正規表現で数字部分だけ抽出 → intに変換
df['人数'] = df['info'].str.extract(r'(\d+)').astype(int)
print(df)

str.extract()は正規表現のパターンにマッチした部分を取り出します。

小数を含む数値の抽出

df = pd.DataFrame({
    'weight': ['体重: 65.5kg', '体重: 70.2kg', '体重: 58.0kg']
})

# 小数点を含む数値を抽出 → floatに変換
df['体重'] = df['weight'].str.extract(r'(\d+\.\d+)').astype(float)
print(df)

一括して複数の記号を除去したい場合(正規表現で除去)

df = pd.DataFrame({
    'price': ['¥1,200', '¥2,500', '¥3,800']
})

# 正規表現で数字以外を除去 → intに変換
df['price'] = df['price'].str.replace(r'\D', '', regex=True).astype(int)
print(df)

\D は「数字以外の文字」を意味します。regex=Trueを指定することで正規表現が使えます。

よくある応用パターン

処理内容方法
通貨記号や単位の削除str.replace()で除去
数字の抽出str.extract(r'\d+')(整数)または r'\d+\.\d+'(小数)
数字と文字列が混在str.replace()astype()を組み合わせる
数値と文字列を一括で正規表現処理str.replace(r'\D', '', regex=True)

実践演習データ例

df = pd.DataFrame({
    'salary': ['¥5,000', '¥7,500', '¥10,000'],
    'bonus': ['約500円', '1000円程度', 'なし']
})

# salary: ¥記号とカンマ削除してint化
df['salary'] = df['salary'].str.replace(r'\D', '', regex=True).astype(int)

# bonus: 数値があれば抽出、なければNaN
df['bonus'] = pd.to_numeric(df['bonus'].str.extract(r'(\d+)')[0], errors='coerce')

print(df)

出力結果

   salary  bonus
0    5000  500.0
1    7500 1000.0
2   10000    NaN

まとめ

操作方法型変換
数字の取り出しstr.extract().astype(int or float)
記号の削除str.replace().astype(int or float)
数字以外の削除str.replace(r'\D', '', regex=True).astype(int)
変換失敗でNaNにしたいpd.to_numeric(..., errors='coerce')float型に自動変換

以上、PythonのPandasで文字列にある数値を変換する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次