CSV数据行(取值)的列数多于表头字段数-Pandas无法正常读取

CSV数据行(取值)的列数多于表头字段数-Pandas无法正常读取

问题描述:在使用Pandas正常读取csv文件时,报错提示“ ParserError: Error tokenizing data. C error: Expected 460 fields in line 3363, saw 472”。也就是数据行的值个数多于表头字段个数。处理过程记录如下,完整代码和测试数据可以从Github仓库Useful-Python-Scripts获取,也可以在jupyter nbviewer中在线浏览。

# 读取一个测试数据.   数据可以在Datasets文件夹获取.
import pandas as pddf = pd.read_csv('../Datasets/CSV数据行的列数大于表头字段个数/2024_06_05_21.csv', index_col=0)df.shape
---------------------------------------------------------------------------ParserError                               Traceback (most recent call last)<ipython-input-2-6be17fa04a2a> in <module>2 import pandas as pd3 
----> 4 df = pd.read_csv('../Datasets/CSV数据行的列数大于表头字段个数/2024_06_05_21.csv', index_col=0)5 6 df.shaped:\installation\Anaconda3\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs)309                     stacklevel=stacklevel,310                 )
--> 311             return func(*args, **kwargs)312 313         return wrapperd:\installation\Anaconda3\lib\site-packages\pandas\io\parsers\readers.py in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)584     kwds.update(kwds_defaults)585 
--> 586     return _read(filepath_or_buffer, kwds)587 588 d:\installation\Anaconda3\lib\site-packages\pandas\io\parsers\readers.py in _read(filepath_or_buffer, kwds)486 487     with parser:
--> 488         return parser.read(nrows)489 490 d:\installation\Anaconda3\lib\site-packages\pandas\io\parsers\readers.py in read(self, nrows)1045     def read(self, nrows=None):1046         nrows = validate_integer("nrows", nrows)
-> 1047         index, columns, col_dict = self._engine.read(nrows)1048 1049         if index is None:d:\installation\Anaconda3\lib\site-packages\pandas\io\parsers\c_parser_wrapper.py in read(self, nrows)222         try:223             if self.low_memory:
--> 224                 chunks = self._reader.read_low_memory(nrows)225                 # destructive to chunks226                 data = _concatenate_chunks(chunks)d:\installation\Anaconda3\lib\site-packages\pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader.read_low_memory()d:\installation\Anaconda3\lib\site-packages\pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader._read_rows()d:\installation\Anaconda3\lib\site-packages\pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader._tokenize_rows()d:\installation\Anaconda3\lib\site-packages\pandas\_libs\parsers.pyx in pandas._libs.parsers.raise_parser_error()ParserError: Error tokenizing data. C error: Expected 460 fields in line 3363, saw 472
"""
报错表明在处理CSV文件时,第3363行的字段数量与预期的不符。预期应该有460个字段,但实际看到了472个值.
正常情况下,pandas无法按照标准的二维表进行读取.
"""
"""
一种解决方案是:可以使用Python内置的csv模块, CSV对象工具包逐行读取CSV文件.
"""
# 这是一个示例脚本.
import csv# 指定要读取的CSV文件路径
csv_file_path = '../Datasets/CSV数据行的列数大于表头字段个数/2024_06_05_21.csv'# 逐行读取CSV文件
with open(csv_file_path, mode='r', encoding='utf-8') as csvfile:csv_reader = csv.reader(csvfile)for line_number, row in enumerate(csv_reader, start=1):try:# 处理每一行数据print(f"行号 {line_number} 的数据: {row}")# 这里可以根据需要进行数据处理except Exception as e:print(f"第 {line_number} 行处理出错: {e}")
一种解决方案
import csv# 指定输入和输出文件路径.
input_csv_file = '../Datasets/CSV数据行的列数大于表头字段个数/2024_06_05_21.csv'
output_csv_file = '../Datasets/CSV数据行的列数大于表头字段个数/modified_file.csv'# 初始化最大列数.
max_columns = 0
rows = []# 逐行读取CSV文件.
with open(input_csv_file, mode='r', encoding='utf-8') as csvfile:csv_reader = csv.reader(csvfile)# 获取表头.header = next(csv_reader)rows.append(header)# 遍历每一行.for row in csv_reader:rows.append(row)# 更新最大列数.max_columns = max(max_columns, len(row))  # 统计数据行的最大列数.# 生成新的表头.
modified_header = header[:]  # 先复制一份原始表头.
while len(modified_header) < max_columns:  # 添加“Missing”直到最大列数.modified_header.append("Missing")# 写入新的CSV文件.
with open(output_csv_file, mode='w', newline='', encoding='utf-8') as csvfile:csv_writer = csv.writer(csvfile)# 写入修改后的表头.csv_writer.writerow(modified_header)# 写入未修改的数据行(原样写入).for row in rows[1:]:  # 跳过原始表头.csv_writer.writerow(row)print("文件处理完成,已输出到", output_csv_file)
文件处理完成,已输出到 ../Datasets/CSV数据行的列数大于表头字段个数/modified_file.csv
# 再次读取测试,正常读取.
import pandas as pddf = pd.read_csv('../Datasets/CSV数据行的列数大于表头字段个数/modified_file.csv', index_col=0)
df.shape
(6428, 471)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】手写 Tomcat 七

目录 一、优化 Dao 1. 设置 UserDaoImpl 为单例模式 2. 创建 Dao 工厂 3. 在 Service 层获取 UserDao 的实例 二、优化 Service 1. 设置 UserServiceImpl 为单例模式 2. 创建 Service 工厂 3. 在 Servlet 层获取 Service 实现类的对象 三、优化 Servlet 1. 使用配置…

NAND Flash虚拟层坏块管理机制

NAND Flash虚拟层坏块管理机制包括再判断坏块、坏块有效数据恢复、写入坏块标志等操作; 坏块管理(LML_BadBlkManage())LML_BadBlkManage()函数首先获取新的空闲块用来代替坏块,再将坏块中的有效数据拷贝到空闲块中(恢复坏块中的有效数据),最后往坏块中写入坏块标志,再写入…

Leetcode面试经典150题-322.零钱兑换

给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。 示…

cas5.3统一登录前后端分离改造方案(源码)

cas5.3 为什么选择cas5.3 版本 5.3 版本是最新的支持jdk8 的版本&#xff0c;并且项目架构基于maven &#xff0c;商业项目中jdk8 仍是主流&#xff0c;在考虑商业收益的情况下&#xff0c;如果客户不要求&#xff0c;不会升级jdk, 基于Maven的项目比gradle 简单&#xff0c;…

【无人机设计与控制】Multi-UAV|多无人机多场景路径规划算法MATLAB

摘要 本研究探讨了多无人机路径规划问题&#xff0c;提出了三种不同算法的对比分析&#xff0c;包括粒子群优化&#xff08;PSO&#xff09;、灰狼优化&#xff08;GWO&#xff09;和鲸鱼优化算法&#xff08;WOA&#xff09;。利用MATLAB实现了多场景仿真实验&#xff0c;验证…

【WSL——Windows 上使用 Linux 环境】

引入 以前在windows上使用linux工具链&#xff0c;一般都要安装虚拟机&#xff08;VMware/virtualBox)。虚拟机的缺点是&#xff0c;因为是完整的虚拟环境&#xff0c;消耗系统资源比较多。 windows自己开发了WSL功能&#xff0c;实现了虚拟机的功能&#xff0c;但是比虚拟机性…

深度学习技术在流体力学中的应用与实操培训【1/3理论课程2/3实操课程】

智能流体力学及其仿真技术应用实战 前沿背景 在当今科学技术快速发展的背景下,流体力学和计算流体力学(CFD)正经历着深刻的变革。传统的流体仿真技术已无法满足日益复杂和高精度的工程需求,而深度学习和人工智能技术的飞速进步,为流体力学的研究和应用提供了新的解决方案…

使用Python实现深度学习模型:智能数据隐私保护

随着数据隐私问题的日益严重,如何在深度学习模型中保护用户数据成为了一个重要的研究方向。本文将介绍如何使用Python实现一个深度学习模型,同时采用差分隐私技术来保护数据隐私。 一、数据隐私保护的背景 在深度学习中,模型通常需要大量的数据进行训练,这些数据可能包含…

BSS是什么

终端能够连上该BSS&#xff0c;主要取决于几个关键因素&#xff0c;包括无线网络的设置、终端设备的配置以及环境条件等。以下是一些详细的步骤和要点&#xff1a; 1. 确保无线网络&#xff08;BSS&#xff09;已正确设置 SSID&#xff08;服务集标识符&#xff09;&#xff…

C++那些事之内存优化

C那些事之内存优化 通常程序运行时内存是一个比较大的问题&#xff0c;如何减少内存占用和提升访问速度是至关重要。为了解决这些问题&#xff0c;C20 引入了 no_unique_address 特性&#xff0c;并结合空基类优化&#xff08;EBO, Empty Base Optimization&#xff09;&#x…

安全运营 -- GPO审计

0x00 背景 审计GPO&#xff0c;目的是审计哪些GPO权限分配不合理&#xff0c;包括但不限于审计预期以外的用户具有对GPO的写权限。 0x01 开启审核 在一台windows服务器上 开始 -- 运行 -- 输入 server manager 依次点击Manage -- Add Roles and Features Wizard 角色和功能…

组合优化与凸优化 学习笔记5 对偶拉格朗日函数

有的时候约束条件有点难搞&#xff0c;我们可以把它放到目标函数里面。 记得之前凸函数的时候的结论吗&#xff1f;一大堆函数&#xff0c;每一段都取最大的&#xff0c;最后会得到一个凸函数。同理&#xff0c;每一段都取最小的&#xff0c;得到的是一个凹函数。就这样&#x…

【Golang】Go语言字符串处理库--strings

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

数通 1

通信&#xff1a;需要介质才能通信电话离信号塔&#xff08;基站&#xff09;越远&#xff0c;信号越弱。信号在基站之间传递。你离路由器越远&#xff0c;信号越差。一个意思 比如想传一张图片&#xff0c;这张图片就是数据载荷 网关&#xff0c;分割两个网络。路由器可以是网…

宠物医院微信小程序源码

文章目录 前言研究背景研究内容一、主要技术&#xff1f;二、项目内容1.整体介绍&#xff08;示范&#xff09;2.系统分析3.数据表信息4.运行截图5.部分代码介绍 总结 前言 随着当代社会科技的迅速发展&#xff0c;计算机网络时代正式拉来帷幕&#xff0c;它颠覆性的影响着社会…

新版pycharm如何导入自定义环境

我们新的版本的pycharm的ui更改了&#xff0c;但是我不会导入新的环境了 我们先点击右上角的add interpreter 然后点击添加本地编译器 先导入这个bat文件 再点击load 我们就可以选择我们需要的环境了

SpringBoot3脚手架

MySpringBootAPI SpringBoot3脚手架&#xff0c;基于SpringBoot3DruidPgSQLMyBatisPlus13FastJSON2Lombok&#xff0c;启动web容器为Undertow(非默认tomcat)&#xff0c;其他的请自行添加和配置。 <java.version>17</java.version> <springboot.version>3.3…

【软件测试】压力测试的学习总结

一、压力测试的定义和目标 压力测试是指在超出正常操作范围的情况下&#xff0c;对系统进行测试&#xff0c;以评估其性能、稳定性和可靠性。其主要目标包括&#xff1a; 评估系统的承载能力&#xff1a;确定系统在极端条件下的最大负载能力。识别系统瓶颈&#xff1a;发现系…

工具类:JWT

工具类&#xff1a;JWT 依赖JwtUtil.java 依赖 <!-- 创建、解析 和 验证JSON Web Tokens (JWT)--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependenc…

(C语言)求链表的倒数第m个元素(双指针法)

写在所有的前面&#xff1a; 本文采用C语言实现代码 目录 写在所有的前面&#xff1a;题目说明题目&#xff1a;题目出处题目描述Description输入Input输出Output样例Sample限制Hint 解答说明方案1解题思路一般情况特殊情况 代码实现其他解释 题目说明 题目&#xff1a; 题…