映射列值是指將一個列中的某些特定值映射為另外一些值,常用於數據清洗和轉換。 使用映射列值的場景有很多,以下是幾種常見的場景: 1. 將字元串類型的列中的某些值映射為數字。例如,將“男”和“女”分別映射為 0 和 1,以便進行機器學習演算法的訓練和預測。 2. 將縮寫替換為全稱。例如,將“USA”和“U ...
映射列值是指將一個列中的某些特定值映射為另外一些值,常用於數據清洗和轉換。
使用映射列值的場景有很多,以下是幾種常見的場景:
- 將字元串類型的列中的某些值映射為數字。例如,將“男”和“女”分別映射為 0 和 1,以便進行機器學習演算法的訓練和預測。
- 將縮寫替換為全稱。例如,將“USA”和“UK”分別替換為“美國”和“英國”,使得數據更加易讀。
- 將錯誤拼寫的單詞替換為正確的單詞。例如,將“Cocacola”替換為“Coca-Cola”,以避免錯誤的統計和分析。
本篇介紹幾個常用的映射小技巧。
1. map 映射
map
映射是最簡單也是最直接的,比如下麵的示例,將性別映射成0
和1
。
import pandas as pd
df = pd.DataFrame({
"name": ["Lily", "Harry",
"Annie", "Joe","Tom"],
"sex": ["female", "male",
"female", "male","male"],
"grade":["A", "E", "B", "F", "A"],
})
df.sex = df.sex.map({
"female": 0,
"male": 1,
})
df
2. factorize 映射
用map
函數映射列的值是最直觀的方式,不過如果列的值種類比較多的時候,一個一個映射比較麻煩。
比如下麵示例中的 grade
列,不像 sex
列只有兩種值。
這時,可以用 factorize 方法來映射。
df = pd.DataFrame({
"name": ["Lily", "Harry",
"Annie", "Joe","Tom"],
"sex": ["female", "male",
"female", "male","male"],
"grade":["A", "E", "B", "F", "A"],
})
df.sex = df.sex.factorize()[0]
df.grade = df.grade.factorize()[0]
df
factorize函數返回的是一個二元元組,第一個元素是映射之後的數字數組,
第二個元素是索引類型,索引的值就是列中各個不同的值。
df.grade.factorize()
所以代碼中用的是 factorize()[0]
。
這裡還有一個小技巧,如果映射後想把得到的值二元化,
比如上面的 grade
列,映射之後有4
種不同的值,代表不同的成績等級。
如果我們只想要不及格(F
)和及格(非F
)兩種情況,那麼
df.grade = df.grade.factorize()[0]
df.grade = (df.grade == 3).astype("int")
df