0

0

处理包含非数值数据的 CSV 文件中的数值列

碧海醫心

碧海醫心

发布时间:2025-10-26 09:07:01

|

947人浏览过

|

来源于php中文网

原创

处理包含非数值数据的 csv 文件中的数值列

本文旨在解决 Pandas 读取 CSV 文件时,由于数值列中存在少量非数值数据导致整列被识别为字符串类型的问题。我们将介绍如何利用 `pd.to_numeric` 函数强制转换数据类型,并将无法转换为数值的数据设置为 `NaN`,从而确保数值列的正确处理和分析。

在使用 Pandas 处理 CSV 文件时,经常会遇到一些列的数据类型与预期不符的情况。例如,某一列本应是数值类型,但由于其中混入了少量的非数值数据(如字符串),导致 Pandas 将整列识别为 object 类型(Pandas 中表示字符串的类型)。这会给后续的数值计算和分析带来麻烦。

以下介绍如何解决这个问题,确保 Pandas 能正确识别和处理数值列。

问题分析

当 Pandas 在读取 CSV 文件时,会根据每一列的数据自动推断其数据类型。如果某一列中既包含数值,又包含非数值数据,Pandas 通常会将其识别为 object 类型,因为它无法确定一个统一的数值类型来表示该列的所有数据。

解决方案:使用 pd.to_numeric 函数

pd.to_numeric 函数是 Pandas 中专门用于将数据转换为数值类型的函数。它的一个重要参数是 errors,可以控制在转换过程中遇到无法转换的数据时的处理方式。

  • errors='raise' (默认值): 如果遇到无法转换的数据,会抛出异常。
  • errors='coerce' : 如果遇到无法转换的数据,将其设置为 NaN (Not a Number)。
  • errors='ignore' : 如果遇到无法转换的数据,保持原样。

在本例中,我们应该使用 errors='coerce',将无法转换为数值的数据设置为 NaN。

示例代码

假设我们有一个名为 data.csv 的文件,其中包含以下数据:

ChuangxinCMS企业网站管理系统1.0
ChuangxinCMS企业网站管理系统1.0

欢迎使用ChuangxinCMS企业网站管理系统软件! ChuangxinCMS是一个采用PHP技术和MYSQL数据库开发的企业网站管理系统,使用ChuangxinCMS能在最短的时间内花费最少的成本来搭建一个功能完善的企业网站,ChuangxinCMS具有一系列完善的内容管理功能,包括文章发布、分类管理、产品发布展示、下载模块等,整个系统页面设计简洁大方,功能实用高效,是中小型企业建站的最佳选择

下载
name,salary
Tom,50000
Anna,foo
Mike,60000

salary 列应该是一个数值列,但是由于 "Anna" 的薪水是 "foo" (字符串),导致 Pandas 可能会将 salary 列识别为 object 类型。

以下代码演示了如何使用 pd.to_numeric 函数来解决这个问题:

import pandas as pd
import numpy as np

# 读取 CSV 文件
df = pd.read_csv("data.csv")

# 打印原始数据类型
print("原始数据类型:")
print(df.dtypes)

# 将 salary 列转换为数值类型,并将无法转换的数据设置为 NaN
df['salary'] = pd.to_numeric(df['salary'], errors='coerce')

# 打印转换后的数据类型
print("\n转换后的数据类型:")
print(df.dtypes)

# 打印处理后的 DataFrame
print("\n处理后的 DataFrame:")
print(df)

代码解释

  1. import pandas as pd: 导入 Pandas 库。
  2. import numpy as np: 导入 NumPy 库,因为 NaN 是 NumPy 中的一个特殊值。
  3. df = pd.read_csv("data.csv"): 使用 pd.read_csv 函数读取 CSV 文件,并将其存储到 DataFrame df 中。
  4. print(df.dtypes): 打印 DataFrame 中每一列的数据类型,以便我们了解哪些列需要进行类型转换。
  5. df['salary'] = pd.to_numeric(df['salary'], errors='coerce'): 这是关键的一步。
    • df['salary']:选择 salary 列。
    • pd.to_numeric(df['salary'], errors='coerce'):将 salary 列中的数据转换为数值类型。errors='coerce' 表示如果遇到无法转换的数据,将其设置为 NaN。
    • df['salary'] = ...:将转换后的数据重新赋值给 salary 列。
  6. print(df.dtypes): 再次打印 DataFrame 中每一列的数据类型,以确认 salary 列是否已成功转换为数值类型。
  7. print(df): 打印处理后的 DataFrame,可以看到 "Anna" 的薪水已经变成了 NaN。

输出结果

原始数据类型:
name      object
salary    object
dtype: object

转换后的数据类型:
name       object
salary    float64
dtype: object

处理后的 DataFrame:
   name   salary
0   Tom  50000.0
1  Anna      NaN
2  Mike  60000.0

可以看到,salary 列的数据类型已经成功转换为 float64,并且 "Anna" 的薪水变成了 NaN。

注意事项

  • 在将数据转换为数值类型之前,最好先检查一下数据中是否包含一些特殊字符或格式错误,例如空格、逗号、货符号等。如果有,需要先进行清理,然后再进行类型转换。
  • NaN 值在数值计算中通常会被忽略。如果需要对 NaN 值进行处理,可以使用 fillna 函数将其替换为其他值,例如 0、平均值或中位数。

总结

通过使用 pd.to_numeric 函数,我们可以轻松地将包含非数值数据的列转换为数值类型,并将无法转换的数据设置为 NaN。这使得我们可以更加方便地进行数值计算和分析。在处理 CSV 文件时,建议先检查每一列的数据类型,然后根据需要进行类型转换,以确保数据的正确性和一致性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

70

2025.12.04

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.09.27

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

310

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1503

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

625

2023.11.24

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

33

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号