最終更新日: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ファイルを読み込みます。
型を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’カラムを新しく作って、結果を格納します。
これで完成です。