最終更新日:2021/9/2

ここでは、ありがちな、文字列型の数字を数値型に変更する方法を説明します。 

例えば、「1,000」など、「,」(カンマ)がついて、文字列になっている数字です。

一言で言うと、「文字列の数字を数値型にする」という事です。最も嫌う事例ですが、現実には、度々遭遇すると思います。

Excelと異なり、このままでは計算ができません。
Excelで、文字か数字かを確かめるには=ISNUMBER(A1)と入力します。FALSEならば、文字列です。
また、Excelで文字列を数値に変換するには、=VALUE(A1)と入力します。

しかし、Pythonではこんなに簡単にはいきません。

上のように、元のデータをExcelで修正できれば、そちらの方が早いですし、まず、それを考えるべきです。しかし、どうしてもPythonで加工するしかないこともあります。その時に、役立つ方法を紹介します。

【やること】
1. 文字列の数字から「’,’」(カンマ)を削除 : df['clm'].str.replace(',','')
2. 数値型(float)にする : df['clm'].astype(float)

1. 文字列の数字から「,」(カンマ)を削除

以下のcsvファイルを読み込みます。

a006_001.csv

型をdf.dtypesで確認すると、’price’カラムはobject型であり、このままでは’price’カラムを使って計算が出来ません。因みに、’quantity’カラムはint64型です。

そこで、まず、df['clm'].str.replace()を使って、’price’カラムからカンマ(,)を取り除きます。.str.replace()で引数を(‘,’ , ”)と指定すれば、’,’(カンマ)を取り除く事ができます。
これは、Excelで置換(Ctrl+H)で「,」を「」(何も入れない)に置換するのに相当します。

【ポイント】

  • df['clm'].str.replace()では、.strを指定します。
  • df['clm'].str.replace(',' , '')と引数を指定すれば、「,」を除去となります。


なお、’name’カラムにある、「_copy」という文字も、ありがちです。
これも同様にdf['clm'].str.replace('_copy', '')と引数を指定すれば、除去できます。

2. 数値型(float)にする

次に、df['clm'].astype(float)で型を変換します。
価格×数量の計算をしたいので、’Total’カラムを新しく作って、結果を格納します。


これで完成です。