首页 > 其他分享 >【pandas小技巧】--字符串转数值

【pandas小技巧】--字符串转数值

时间:2023-08-09 09:13:03浏览次数:53  
标签:转换 -- numeric df 3.3 pd 字符串 pandas

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

  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

image.png
上面的示例把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

image.png

这时,可以用 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

image.png
C列正常转换为float64,无法转换的值变成NaN

如果不希望用NaN来填充异常的值,可以再用 fillna 填充自己需要的值。

df.C = pd.to_numeric(
    df.C, errors="coerce"
).fillna(0.0)
df

image.png

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

image.png
同样,apply也可以通过fillna填充缺失值NaN

df = df.apply(
    pd.to_numeric, errors="coerce"
).fillna(0.0)
df

image.png

标签:转换,--,numeric,df,3.3,pd,字符串,pandas
From: https://www.cnblogs.com/wang_yb/p/17615950.html

相关文章

  • 《CUDA编程:基础与实践》读书笔记(2):CUDA内存
    1.全局内存核函数中的所有线程都能够访问全局内存(globalmemory)。全局内存的容量是所有设备内存中最大的,但由于它没有放在GPU芯片内部,因此具有相对较高的延迟和较低的访问速度,cudaMalloc分配的就是全局内存。此外,当处理逻辑上的二维或者三维问题时,还可以使用cudaMallocPitch和......
  • serilog日志
      1安装包   第一个是基础的配置,第二个包是集成Serilog日志记录器的扩展包,简化在.NET应用程序中集成和配置Serilog的过程。第三个是保存在文档中 2 配置文件   public static void AddSerilog(this WebApplicationBuilder builder)    ......
  • JavaSE--运算符
    一、运算符运算符:用于指明对于操作数的运算方式1、运算符分类  1)按照操作数的数目分  单目操作符、双目操作符、三目操作符  2)按照运算符的功能来分  算术运算符、赋值运算符、关系运算符、逻辑运算符2、运算符详解  1)算数运算符+加法-减法*乘法/除法......
  • asound.conf的作用
    asound.conf允许对声卡或者设备进行更高级的控制,提供访问alsa-lib中的pcm插件方法,允许你做更多的复杂的控制,比如可以把声卡组合成一个或者多声卡访问多个I/O。Defaultpluginpcm.!default{typehwcard0}ctl.!default{typehwcard0......
  • springboot~mybatis中使用selectKey获取自增主键
    在mybatis中,我们在insert操作之后,可以获取到自增主键的值,这个需要我们用到这个方法,在使用时有一个坑需要注意,一会儿会说到。假设我们有数据表id_offset,然后id是自增主键我们在插入数据后,希望得到这个新插入的主键的值我们不希望通过两条语句实现,因为这样在并发时会有问题数......
  • Windows加域后通过注册表取消壁纸锁定更换壁纸
    打开注册表:开始--运行--regedit(快捷键Win+R)然后找到HKEY_CURRENT_USER==>Software==>Microsoft==>Windows==>CurrentVersion==>Policies,可以输入如下路径到路径栏计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies该目录下有两个子......
  • 关于三次握手和四次挥手,面试官到底想听到怎样的回答?
    我一看到TCP,啪就点进来了,很快啊。  TCP报文   一个完整的TCP报文头部共有20个字节,其中包括:源端口号(16位)和目的端口号(16位):再加上ip首部的源ip地址和目的IP地址可以唯一确定一个TCP连接。数据序号(16位):表示在这个报文段中的第一个数据字节序号。确认序号:仅当......
  • CF1477E题解
    洛谷博客链接此篇未投洛谷题解,因为写得太菜了qwq。CF1477E&大户爱的送分题题解(CF1477E为我出的校内模拟赛的一道题——《大户爱的送分题》的待修版本)大户爱的送分题文件名OhtoAiFirst.cpp/.in/.out,时间限制\(1\)秒,空间限制\(256MB\)。注意第一个字母是O而不是0。题目背......
  • 电机基础知识
     一、电机分类1、直流有刷电机:只需调整电压,即可调整转速2、直流无刷电机:无电刷和换向器的电机3、舵机:特殊直流电机,自带控制器,舵机本身是闭环控制系统(伺服系统)。给舵机发送指令信号,可以将指令信号变换成轴的角度并保持住,即便负载变化,也能够自动调节。4、步进电机:将电脉冲信......
  • 自动填充
    对于添加和更新的时间设置自动填充时间。在表中添加两个字段为time类型,为了让实体类能够映射,采用下划线格式,对照实体类驼峰命名。(需要在yml中添加驼峰支持)创建属性后需要添加注解表示在添加和更新后更新时间(更新只用更新updaTime) 然后为他们创造处理器,添加@Component注解注......