1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pandasを使って、データを文字列から数値に変換する

Posted at

データエンジニアが遭遇する可能性のある最も一般的なデータの問題とその対処法についての備忘録です。

サンプルデータフレームの生成

pandasを用いてサンプルのデータフレームを作成します。

import pandas as pd

# 架空のデータフレームの作成
sales = pd.DataFrame({
    'SalesOrderID': [101, 102, 103],
    'Quantity': [10, 15, 12],
    # ↓汚いデータの例
    'Revenue': ["1500円", "2300円", "1800円"]
})

# データフレームの表示
print(sales)

下記が作成したデータフレームになります。

   SalesOrderID  Quantity Revenue
0           101        10  1500円
1           102        15  2300円
2           103        12  1800円

dtypes関数を使いデータ型を確認します。

sales.dtypes

↓出力結果

SalesOrderID     int64
Quantity         int64
Revenue         object
dtype: object

dtypes属性を使用してカラムのデータ型を詳しく調べると、Revenue列ではobjectが返されます。objectは、pandasが文字列を格納するために使用するものです。

この状態でRevenue列にsum関数を適用すると、

sales['Revenue'].sum()

下記のような出力結果になります。

"1500円2300円1800円"

ご覧の通り、各行の文字列を合わせた連結文字列が出力されます。これは期待するものではありません。

前処理を行う

# Revenue列の全行から'円'を削除
sales['Revenue'] = sales['Revenue'].str.strip('')

# Revenue列の全データをstringからintに変更
sales['Revenue'] = sales['Revenue'].astype('int')

再度、各カラムの型を確認します。

sales.dtypes

↓出力結果

SalesOrderID    int64
Quantity        int64
Revenue         int64
dtype: object

Revenue列がint型に変更されたことを確認できました。

確認

再度、Revenue列の合計を計算してみます。

sales['Revenue'].sum()

↓出力結果

5600

期待通りRevenue列の合計額を取得できました!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?