趋近智
正如我们在章节引言中讨论过的,计算机根据数据分配的类型对数据进行不同处理。执行数学计算需要数据为数字格式。如果你的数据集包含以文本(字符串)形式存储的数字,例如'100'或'98.6',你将无法直接使用它们进行加、减、求平均值或更复杂的分析。尝试计算5+′10′很可能导致错误或意外结果,而非你期望的15。本节侧重于将这些基于文本的数字转换为正确的数字类型:整数和浮点数。
在转换之前,让我们快速明确你将遇到的两种主要数字类型:
想象一个表示产品价格的列,但其值却以字符串形式存储,例如'5.99′、′12.00′、′€8.50′。你无法直接从这些文本条目计算平均价格或总销售额。同样,排序可能会按字母顺序进行(′12.00'可能会排在'5.99′之前),而非按数值大小。将这些字符串转换为数字格式(如浮点数)对于正确执行这些操作来说非常重要。
大多数数据分析工具都提供用于尝试这种转换的函数。一般思路是指示工具读取字符串,将其解释为数字,并以适当的数字类型(整数或浮点数)存储。
Pandas 提供了一个名为 pd.to_numeric() 的函数,它专门为此任务设计。
基本转换
假设你有一个名为 prices_text 的 pandas Series(DataFrame 中的一列),其中包含字符串:
0 '5.99'
1 '12.00'
2 '8.50'
Name: prices_text, dtype: object
dtype: object 在 pandas 中通常表示字符串或混合类型。要将其转换为数字类型,你可以使用:
# 假设 'prices_text' 是你的 pandas Series
numeric_prices = pd.to_numeric(prices_text)
print(numeric_prices)
输出将如下所示:
0 5.99
1 12.00
2 8.50
Name: prices_text, dtype: float64
注意 dtype: float64。Pandas 识别了小数点并选择了浮点类型。如果字符串表示整数,例如'100'、'25'、'0',pd.to_numeric() 可能会选择整数类型(int64)。
处理潜在问题
如果列中包含无法解释为数字的值,会发生什么?常见例子包括:
$,€)1,000)N/A,Missing,5 units)如果你尝试直接转换包含此类值的列,pd.to_numeric() 函数通常会停止并引发错误,因为它不知道如何处理非数字条目。
例如,尝试转换 ['5.99', '$12.00', '8.50'] 很可能会在第二个元素处失败。
使用 errors='coerce'
一种非常常见的策略是告诉转换函数将任何有问题的值替换为缺失数据的特殊标记,通常表示为 NaN(非数字)。在 pandas 中,你可以通过使用 errors='coerce' 参数来实现这一点:
# 包含问题值的示例 Series
mixed_values = pd.Series(['100', '55.5', 'N/A', '2,000', '-5'])
# 尝试转换,将错误强制转换为 NaN
numeric_values = pd.to_numeric(mixed_values, errors='coerce')
print(numeric_values)
输出将是:
0 100.0
1 55.5
2 NaN # 'N/A' 变为 NaN
3 NaN # '2,000'(带逗号)变为 NaN
4 -5.0
Name: values, dtype: float64
以下是发生的情况:
errors='coerce' 将其变为 NaN。NaN。请注意,即使一些原始值是整数('100','-5'),整个列的数据类型也变成了 float64。这是因为 NaN 本身在技术上是一个浮点值,因此它的存在会迫使列变为浮点类型以适应它。
使用 errors='coerce' 通常是一个很好的第一步,因为它会为有效数字执行转换,并将有问题条目标记为缺失数据(NaN)。然后你可以决定如何处理这些 NaN 值(例如,检查原始数据,进一步清洗字符串,或使用第 2 章中介绍的填充技术)。
转换时,你应该目标是整数还是浮点数?
NaN 值时,它也是默认选择。pd.to_numeric 之后额外一步(例如使用 .astype(pd.Int64Dtype()),它支持整数和缺失值)。对于入门来说,当存在 NaN 时,让 pandas 默认为浮点数通常是最简单的。正确地将数据转换为数字类型是基础一步。它使你能够执行计算、比较和定量分析,让你更接近于从数据中获取有意义的结论。请记住,在转换前后始终检查数据类型(.dtype),以确保过程按预期进行。
这部分内容有帮助吗?
pd.to_numeric函数的官方文档,详细说明其用法、参数(如errors='coerce')和行为。© 2026 ApX Machine Learning用心打造