iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0

在處理股票或財務資料的時候,我們常常會遇到一個小問題:數字欄位裡面帶有「千分位逗號」。
像是成交量 24,841,820,或價格 1,285,它們其實是「文字 (string)」,而不是「真正的數字 (int/float)」。

這樣的格式看起來比較容易閱讀,但在 數據分析或數學運算 時就會卡住。例如:

  • 想要計算平均成交量 → 會出錯,因為資料是文字而不是數字。
  • 想要比較最大最小價格 → 也會錯,因為字串是按照字母順序比較,不是數值大小。

所以今天的重點,就是把這些「帶逗號的文字數字」清理乾淨,轉換成真正的數字格式。

範例資料

我們先建立一個簡單的 DataFrame,模擬從網路上抓到的資料:

import pandas as pd

demo_df = pd.DataFrame({
    'Price': ['1,285', '1,265.5'],
    'Volume': ['24,841,820', '32,019,276']
})

print(demo_df)

輸出結果:

    Price     Volume
0   1,285  24,841,820
1  1,265.5 32,019,276

可以看到,這些數字都有逗號,看起來像數字,但實際上是 文字型態 (object)。

清理步驟

  • 移除逗號

我們可以先用 str.replace(',', ''),把字串裡的逗號刪掉:

demo_df['Price'] = demo_df['Price'].str.replace(',', '')
demo_df['Volume'] = demo_df['Volume'].str.replace(',', '')

print(demo_df)

輸出結果:

   Price    Volume
0   1285  24841820
1  1265.5 32019276

現在看起來已經變成「純數字字串」,但仍然是文字型態。

  • 轉換為數字

接下來用 pd.to_numeric() 把欄位轉換成數字:

demo_df['Price'] = pd.to_numeric(demo_df['Price'])
demo_df['Volume'] = pd.to_numeric(demo_df['Volume'])

這樣 Price 就會自動變成 float(因為有小數點),
而 Volume 會變成 int(因為是整數)。

確認型態

我們可以用 dtypes 來檢查欄位型態:

print(demo_df.dtypes)

結果會是:

Price     float64
Volume      int64
dtype: object

這就表示我們已經完成轉換,資料可以放心拿來做計算。

結論

今天我們學會了如何清理數字欄位:

  • 用 .str.replace(',', '') 移除逗號
  • 用 pd.to_numeric() 把文字轉換成數字

這個技巧在處理財務數據、股市資料、甚至一般的統計報表時都會用到,是非常實用的一步。
那今天先這樣。
/images/emoticon/emoticon29.gif


上一篇
處理日期格式(字串轉 datetime)
系列文
從網路爬蟲到資料洞察的應用8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言