Pandas 基礎 (6) - 用 replace () 函式處理不合理資料

Rachel發表於2019-03-24

引入 csv 檔案:

import pandas as pd
import numpy as np
df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/6_handling_missing_data_replace/weather_data.csv')
df

輸出:

Pandas 基礎 (6) - 用 replace () 函式處理不合理資料

從上面的輸出截圖, 可以看到有很多不合理的資料, 這時可以用 replace() 函式來處理:

new_df = df.replace([-99999, -88888], np.NaN)

輸出:

Pandas 基礎 (6) - 用 replace () 函式處理不合理資料

這時, 就還剩下 event 列裡的 0 還沒有改, 因為沒辦法簡單粗暴地把數字 0 放到 replace 函式的陣列裡, 這樣會影響其他列的值. 所以要用 python 的 dictionary:

new_df = df.replace({
    'temperature' : -99999,
    'windspeed':[-99999, -88888],
    'event': '0'
}, np.NaN)

下面再來改下原 csv 檔案, 把其中各別資料加上"單位":

Pandas 基礎 (6) - 用 replace () 函式處理不合理資料

如果我們想把多餘的字母單位去掉, 可以用正則:

new_df = df.replace('[A-Za-z]','', regex=True)

這樣替換之後,可以看一眼輸出結果, 發現 event 列的內容都沒有了, 因為字母都被替換掉了. 所以還是要這樣做:

new_df = df.replace({
    'temperature': '[A-Za-z]',
    'windspeed': '[A-Za-z]'
} ,'', regex=True)

另一個特性:
首先

df = pd.DataFrame({
    'score': ['exceptional', 'average', 'good', 'poor', 'average', 'exceptional'],
    'student': ['rob', 'maya', 'jorge', 'tom', 'july', 'erica']
})

輸出:

Pandas 基礎 (6) - 用 replace () 函式處理不合理資料

可以看到目前 score 列是用4個形容詞來體現成績的, 那如果想把它們按照等級換成 1-4分呢?

new_df = df.replace(['poor', 'average', 'good', 'exceptional'], [1, 2, 3, 4])

輸出:

Pandas 基礎 (6) - 用 replace () 函式處理不合理資料

That's it about replace().

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章