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

pandas,技巧,字符串,数值 · 浏览次数 : 217

小编点评

**字符串转数字的用途和场景** **数据清洗** * 避免数据类型错误。 * 将字符串类型转换为数字类型。 **数据整理** * 去除格式问题。 * 将字符串类型转换为数字类型。 **数据可视化** * 将含有数字信息的字符串转换为数字类型。 **机器学习** * 将文本或其他非数字类型的特征转换为数字型特征。 **常用的字符串转数字方法** **1. astype** * 通过 `astype()` 函数更改列的数据类型。 **2. to_numeric** * 使用 `to_numeric()` 函数强制转换字符串到数字类型。 * 允许设置 `errors` 参数来控制错误处理。 **3. pd.to_numeric** * 使用 `pd.to_numeric()` 函数进行更复杂的数据类型转换。 * 支持多种错误处理选项。 **4. pd.apply** * 使用 `apply()` 方法对所有列进行数据类型转换。 * 效率可能比 `to_numeric()` 方法高。 **5. pandas.to_numeric** * 使用 `pandas.to_numeric()` 函数进行全局数据类型转换。 * 适用于大量列。

正文

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

  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

与【pandas小技巧】--字符串转数值相似的内容:

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

字符串转数字的用途和场景很多,其中主要包括以下几个方面: 1. 数据清洗:在进行数据处理时,经常会遇到一些数据类型不匹配的问题,比如某些列中的字符串类型被误认为是数字类型,此时需要将这些字符串类型转换为数字类型,才能进行后续的数值计算或统计分析。 2. 数据整理:有时候输入的原始数据可能存在格式问题

【pandas小技巧】--列值的映射

映射列值是指将一个列中的某些特定值映射为另外一些值,常用于数据清洗和转换。 使用映射列值的场景有很多,以下是几种常见的场景: 1. 将字符串类型的列中的某些值映射为数字。例如,将“男”和“女”分别映射为 0 和 1,以便进行机器学习算法的训练和预测。 2. 将缩写替换为全称。例如,将“USA”和“U

【pandas小技巧】--日期相关处理

日期处理相关内容之前`pandas基础`系列中有一篇专门介绍过,本篇补充两个常用的技巧。 # 1. 多列合并为日期 当收集来的数据中,年月日等信息分散在多个列时,往往需要先合并成日期类型,然后才能做分析处理。合并多列转换为日期类型,可以直接用 `to_datetime`函数来处理: ```pytho

【pandas小技巧】--数据转置

所谓**数据转置**,就是是将原始数据表格沿着对角线翻折,使原来的行变成新的列,原来的列变成新的行,从而更方便地进行数据分析和处理。 `pandas`中`DataFrame`的转置非常简单,每个`DataFrame`对象都有一个`T`属性,通过这个属性就能得到转置之后的`DataFrame`。下面介

【pandas小技巧】--统计值作为新列

这次介绍的小技巧不是统计,而是把统计结果作为**新列**和原来的数据放在一起。`pandas`的各种统计功能之前已经介绍了不少,但是每次都是统计结果归统计结果,原始数据归原始数据,没有把它们合并在一个数据集中来观察。 下面通过两个场景示例来演示如果把统计值作为新列的数据。 # 1. 成绩统计的场景

【pandas小技巧】--category类型补充

`category`类型在**pandas基础**系列中有一篇介绍数据类型的文章中已经介绍过。`category`类型并不是`python`中的类型,是`pandas`特有的类型。 `category`类型的优势那篇文章已经介绍过,当时只是介绍了如何将某个列的数据转换成`category`类型,以及

【pandas小技巧】--DataFrame的显示参数

我们在`jupyter notebook`中使用`pandas`显示`DataFrame`的数据时,由于屏幕大小,或者数据量大小的原因,常常会觉得显示出来的表格不是特别符合预期。 这时,就需要调整`pandas`显示`DataFrame`的方式。`pandas`为我们提供了很多调整显示方式的参数,具

【pandas小技巧】--DataFrame的显示样式

上一篇介绍了`DataFrame`的显示参数,主要是对`DataFrame`中值进行调整。 本篇介绍`DataFrame`的显示样式的调整,显示样式主要是对表格本身的调整,比如颜色,通过颜色可以突出显示重要的值,观察数据时可以更加高效的获取主要信息。 下面介绍一些针对单个数据和批量数据的样式调整方式

【pandas小技巧】--花哨的DataFrame

最近github上发现了一个库(`plottable`),可以用简单的方式就设置出花哨的 `DataFrame` 样式。 github上的地址:[https://github.com/znstrider/plottable](https://github.com/znstrider/plottabl

【pandas小技巧】--目录(完结)

`pandas`小技巧系列是介绍的是使用`pandas`分析数据时,最常用的一些操作技巧。 具体包括: 1. [创建测试数据](https://www.cnblogs.com/wang_yb/p/17552748.html) 学习pandas的过程中,为了尝试pandas提供的各类功能强大的函数,常