字符串转数字的用途和场景很多,其中主要包括以下几个方面:
本篇介绍一些常用的字符串转数值的方法。
一般情况下,只需要通过 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
列有字符串类型转换成了浮点数类型。
上面的示例中,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个可选值:
astype
函数一样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
如果需要转换成数值类型的列比较多,用上面的方法一个列一个列的转换效率不高。
可以用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