字元串轉數字的用途和場景很多,其中主要包括以下幾個方面: 1. 數據清洗:在進行數據處理時,經常會遇到一些數據類型不匹配的問題,比如某些列中的字元串類型被誤認為是數字類型,此時需要將這些字元串類型轉換為數字類型,才能進行後續的數值計算或統計分析。 2. 數據整理:有時候輸入的原始數據可能存在格式問題 ...
字元串轉數字的用途和場景很多,其中主要包括以下幾個方面:
- 數據清洗:在進行數據處理時,經常會遇到一些數據類型不匹配的問題,比如某些列中的字元串類型被誤認為是數字類型,此時需要將這些字元串類型轉換為數字類型,才能進行後續的數值計算或統計分析。
- 數據整理:有時候輸入的原始數據可能存在格式問題,例如有些數值前面帶有美元符號或者其他符號,這些符號會幹擾後續的計算,因此需要將它們去掉並轉換為數字類型。
- 數據可視化:在進行數據可視化時,需要將含有數字信息的字元串轉換成數字類型,以便於更好地展示數據、製作圖表。
- 機器學習:在機器學習領域中,經常需要將文本或其他非數字類型的特征轉換為數字型特征,從而應用各種基於數值型特征的演算法模型。
本篇介紹一些常用的字元串轉數值的方法。
1. 一般情況
一般情況下,只需要通過 astype
函數就可以改變列的數據類型。
import pandas as pd
df = pd.DataFrame({
"A": [1,2,3],
"B": [1.1,2.2, 3.3],
"C":["1.2", "2.3", "3.3"],
})
df.dtypes
df.C = df.C.astype("float64")
df.dtypes
上面的示例把C
列有字元串類型轉換成了浮點數類型。
2. 異常值情況
上面的示例中,C
列中每個字元串都可以正常轉換成浮點數,所以用astype
函數就可以了。
不過,大部分情況下,待轉換的列中會存在無法正常轉換的異常值。
直接轉換會報錯:
df = pd.DataFrame({
"A": [1,2,3],
"B": [1.1,2.2, 3.3],
"C":["1.2", "2.3", "xxx"],
})
df.dtypes
df.C = df.C.astype("float64")
df
這時,可以用 to_numeric
函數,此函數的 errors
參數有3個可選值:
- ignore:出現錯誤時忽略錯誤,但是正常的值也不轉換
- raise:拋出錯誤,和
astype
函數一樣 - coerce:無法轉換的值作為
NaN
,可轉換的值正常轉換
df = pd.DataFrame({
"A": [1,2,3],
"B": [1.1,2.2, 3.3],
"C":["1.2", "2.3", "xxx"],
})
df
df.C = pd.to_numeric(df.C, errors="coerce")
df
C
列正常轉換為float64
,無法轉換的值變成NaN
。
如果不希望用NaN
來填充異常的值,可以再用 fillna
填充自己需要的值。
df.C = pd.to_numeric(
df.C, errors="coerce"
).fillna(0.0)
df
3. 全局轉換
如果需要轉換成數值類型的列比較多,用上面的方法一個列一個列的轉換效率不高。
可以用apply
方法配合 to_numeric
一次轉換所有的列。
df = pd.DataFrame({
"A": [1,2,3],
"B": [1.1,2.2, 3.3],
"C":["1.2", "2.3", "xxx"],
"D":["10", "4.6", "yyy"],
})
df
df = df.apply(
pd.to_numeric, errors="coerce"
)
df
同樣,apply
也可以通過fillna
填充缺失值NaN
。
df = df.apply(
pd.to_numeric, errors="coerce"
).fillna(0.0)
df