ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【pandas小技巧】--字符串转数值 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2023-8-9 10:28
标题: 【pandas小技巧】--字符串转数值
字符串转数字的用途和场景很多,其中主要包括以下几个方面:
本篇介绍一些常用的字符串转数值的方法。
1. 一般情况

一般情况下,只需要通过 astype 函数就可以改变列的数据类型。
  1. import pandas as pd
  2. df = pd.DataFrame({
  3.     "A": [1,2,3],
  4.     "B": [1.1,2.2, 3.3],
  5.     "C":["1.2", "2.3", "3.3"],
  6. })
  7. df.dtypes
  8. df.C = df.C.astype("float64")
  9. df.dtypes
复制代码

上面的示例把C列有字符串类型转换成了浮点数类型。
2. 异常值情况

上面的示例中,C列中每个字符串都可以正常转换成浮点数,所以用astype函数就可以了。
不过,大部分情况下,待转换的列中会存在无法正常转换的异常值。
直接转换会报错:
  1. df = pd.DataFrame({
  2.     "A": [1,2,3],
  3.     "B": [1.1,2.2, 3.3],
  4.     "C":["1.2", "2.3", "xxx"],
  5. })
  6. df.dtypes
  7. df.C = df.C.astype("float64")
  8. df
复制代码

这时,可以用 to_numeric 函数,此函数的 errors 参数有3个可选值:
  1. df = pd.DataFrame({
  2.     "A": [1,2,3],
  3.     "B": [1.1,2.2, 3.3],
  4.     "C":["1.2", "2.3", "xxx"],
  5. })
  6. df
  7. df.C = pd.to_numeric(df.C, errors="coerce")
  8. df
复制代码

C列正常转换为float64,无法转换的值变成NaN。
如果不希望用NaN来填充异常的值,可以再用 fillna 填充自己需要的值。
  1. df.C = pd.to_numeric(
  2.     df.C, errors="coerce"
  3. ).fillna(0.0)
  4. df
复制代码

3. 全局转换

如果需要转换成数值类型的列比较多,用上面的方法一个列一个列的转换效率不高。
可以用apply方法配合 to_numeric 一次转换所有的列。
  1. df = pd.DataFrame({
  2.     "A": [1,2,3],
  3.     "B": [1.1,2.2, 3.3],
  4.     "C":["1.2", "2.3", "xxx"],
  5.     "D":["10", "4.6", "yyy"],
  6. })
  7. df
  8. df = df.apply(
  9.     pd.to_numeric, errors="coerce"
  10. )
  11. df
复制代码

同样,apply也可以通过fillna填充缺失值NaN。
  1. df = df.apply(
  2.     pd.to_numeric, errors="coerce"
  3. ).fillna(0.0)
  4. df
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4