字符串转数字的用途和场景很多,其中主要包括以下几个方面:

  1. 数据清洗:在进行数据处理时,经常会遇到一些数据类型不匹配的问题,比如某些列中的字符串类型被误认为是数字类型,此时需要将这些字符串类型转换为数字类型,才能进行后续的数值计算或统计分析。
  2. 数据整理:有时候输入的原始数据可能存在格式问题,例如有些数值前面带有美元符号或者其他符号,这些符号会干扰后续的计算,因此需要将它们去掉并转换为数字类型。
  3. 数据可视化:在进行数据可视化时,需要将含有数字信息的字符串转换成数字类型,以便于更好地展示数据、制作图表。
  4. 机器学习:在机器学习领域中,经常需要将文本或其他非数字类型的特征转换为数字型特征,从而应用各种基于数值型特征的算法模型。

本篇介绍一些常用的字符串转数值的方法。

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个可选值:

  1. ignore:出现错误时忽略错误,但是正常的值也不转换
  2. raise:抛出错误,和astype函数一样
  3. 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

【pandas小技巧】--字符串转数值的更多相关文章

  1. pandas小技巧

    1. 删除列 import pandas as pd df.drop("Unnamed: 0", axis=1, inplace=True) 2. 转换列的格式 df[" ...

  2. pandas 小技巧

    1.找出某个字段包含某字符串的行: my_df[my_df['col_B'].str.contains('大连') > 0]或者 my_df[my_df['col_B'].apply(lambd ...

  3. 小技巧--字符串输入从a[1]开始

    char a[100],b[100]; cin>>a>>(b+1);//cin: abcd abcd cout<<a[1]<<endl<<b ...

  4. java.text.MessageFormat格式化字符串时的小技巧

    java.text.MessageFormat格式化字符串时的小技巧 public static void main(String[] args) throws InterruptedExceptio ...

  5. UVa140 Bandwidth 小剪枝+双射小技巧+枚举全排列+字符串的小处理

    给出一个图,找出其中的最小带宽的排列.具体要求见传送门:UVa140 这题有些小技巧可以简化代码的编写. 本题的实现参考了刘汝佳老师的源码,的确给了我许多启发,感谢刘老师. 思路: 建立双射关系:从字 ...

  6. Pandas一些小技巧

    Pandas有一些不频繁使用容易忘记的小技巧 1.将不同Dataframe写在一个Excel的不同Sheet,或添加到已有Excel的不同Sheet(同名Sheet会覆盖) from pandas i ...

  7. axios的使用小技巧:如何绕过字符串拼接,直接传递对象

     Vue.js官方推荐使用axios作为发送http请求的工具,在使用axios中,有些小技巧是不容易发现的.当我们不知道这些技巧时,我们可能会使用其他"奇技淫巧",比如,我们很容 ...

  8. OMG,12 个精致的 Java 字符串操作小技巧,学它

    字符串可以说是 Java 中最具有代表性的类了,似乎没有之一哈,这就好像直播界的李佳琪,脱口秀中的李诞,一等一的大哥地位.不得不承认,最近吐槽大会刷多了,脑子里全是那些段子,写文章都有点不由自主,真的 ...

  9. Javascript字符串拼接小技巧

    在Javascript中经常会遇到字符串的问题,但是如果要拼接的字符串过长就比较麻烦了. 如果是在一行的,可读性差不说,如果要换行的,会直接报错. 在此介绍几种Javascript拼接字符串的技巧. ...

  10. Python的100个小技巧

    文章转自:https://mp.weixin.qq.com/s/w5do8QYMkO_gLgPupDdJqg 分享100个Python小技巧,帮助大家更好的了解和学习Python. ▍1.for循环中 ...

随机推荐

  1. ET框架6.0分析一、ECS架构

    概述 ET框架的ECS架构是从ECS原生设计思想变形而来的(关于ECS架构的分析可以参考跳转链接:<ECS架构分析>),其特点是: Entity:实体可以作为组件挂载到其他实体上,Enti ...

  2. drf——Request源码分析、序列化组件、序列化类的使用(字段类和参数)、反序列化校验和保存

    1.Request类源码分析 # APIView+Response写个接口 # 总结: 1.新的request有个data属性,以后只要是在请求body体中的数据,无论什么编码格式,无论什么请求方式 ...

  3. phpstudy-sqlilabs-less-4

    题目:GET - Error based - Double Quotes - String              基于错误的GET双引号字符型注入 可能的注入点(不全) ' " ) ') ...

  4. 在Winform中一分钟入门使用好看性能还好的Blazor Hybrid

    在Winform中一分钟入门使用好看性能还好的Blazor Hybrid 安装模板 dotnet new install Masa.Template::1.0.0-rc.2 创建 Winform的Bl ...

  5. Vue 路由router

    简单案例: App.vue是核心组件,其中的<router-link>相当于a标签,to相当于href,export是暴露函数,这样某组件才能被其他组件识别到 代码: <templa ...

  6. SpringMVC 解决中文乱码问题以及前后端Json格式数据交互的测试

    1.今日遇到的报错: 跳转网页出现404原因: 1.检查project structure里面的webapp路径是否正确: 2.检查project structure里的artifaccts里的WEB ...

  7. 代码随想录算法训练营Day31 贪心算法| 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

    代码随想录算法训练营 理论基础 什么是贪心 贪心的本质是选择每一阶段的局部最优,从而达到全局最优. 每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优. 贪心的套路(什么时候用贪心) 贪心 ...

  8. WC2021及学长分享题目

    部分题目见洛谷题单 动态更新. 标 * 为想做的题. hdhd: CF1214G Feeling Good CF1305F Kuroni and the Punishment AGC016F Game ...

  9. Java如何实现去重?这是在炫技吗?

    大家好,我3y啊.由于去重逻辑重构了几次,好多股东直呼看不懂,于是我今天再安排一波对代码的解析吧.austin支持两种去重的类型:N分钟相同内容达到N次去重和一天内N次相同渠道频次去重. Java开源 ...

  10. ISIS 综合实验;BGP 实验

    目录 ISIS 综合实验 实验拓扑 实验需求 实验步骤 1.配置相应接口IP地址及环回口地址 2.配置 IS-IS,要求全网互通,R8的Loop X口暂不宣告 3. R1和R3直连,要求 R3 成为 ...