pandas.errors.ParserError: Error tokenizing data. C error: Expected 17 fields in line 112, saw 18

本文介绍了在使用pandas读取csv文件时遇到的ParserError,原因可能是数据行与期望的列数不符。解决方法包括检查并修正数据,如处理转义字符或删除多余列。

pandas.errors.ParserError: Error tokenizing data. C error: Expected 17 fields in line 112, saw 18

pandas 简介

pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

pandas 读取csv文件

pandas.read_csv:

pandas.read_csv(filepath_or_buffer, *, 
	sep=_NoDefault.no_default, 
	delimiter=None, 
	header='infer', 
	names=_NoDefault.no_default, index_col=None, 
	usecols=None, 
	dtype=None, 
	engine=None, 
	converters=None,
	true_values=None, 
	false_values=None, 
	skipinitialspace=False, 
	skiprows=None, 
	skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=None, infer_datetime_format=_NoDefault.no_default, keep_date_col=False, date_parser=_NoDefault.no_default, date_format=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal='.', lineterminator=None, quotech
当出现 `pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 5, saw 3` 错误,意味着在解析数据时,pandas 期望第 5 行只有 1 个字段,但实际发现了 3 个字段,这通常是由于数据格式不一致导致的。以下是一些可能的解决方法: ### 跳过错误行 可以在读取文件时添加 `error_bad_lines=False` 参数,跳过包含错误字段的行。示例代码如下: ```python import pandas as pd try: df = pd.read_csv('your_file.csv', error_bad_lines=False) except pd.errors.ParserError as e: print(f"解析错误: {e}") ``` ### 指定分隔符 确保文件使用的分隔符与代码中指定的分隔符一致。若文件使用的是制表符分隔,需指定 `sep='\t'`。示例代码如下: ```python import pandas as pd try: df = pd.read_csv('your_file.csv', sep='\t') except pd.errors.ParserError as e: print(f"解析错误: {e}") ``` ### 手动处理错误行 可以逐行读取文件,手动处理错误行。示例代码如下: ```python import pandas as pd lines = [] with open('your_file.csv', 'r') as file: for i, line in enumerate(file): if i == 4: # 第 5 行(索引从 0 开始) # 手动处理这一行 fields = line.strip().split(',') new_line = ','.join(fields[:1]) # 只取第一个字段 lines.append(new_line) else: lines.append(line) from io import StringIO df = pd.read_csv(StringIO(''.join(lines))) ``` ### 转换文件格式 将 csv 文件转换为 xlsx 格式,使用 `openpyxl` 库来读取和写入 Excel 文件,通常不会出现此类问题。示例代码如下: ```python import openpyxl input_file = 'your_file.csv' output_file = 'output.xlsx' # 读取 CSV 文件 with open(input_file, 'r') as file: lines = file.readlines() # 创建新的 Excel 工作簿 wb = openpyxl.Workbook() ws = wb.active # 将 CSV 数据写入 Excel for line in lines: fields = line.strip().split(',') ws.append(fields) # 保存修改后的 Excel 文件 wb.save(output_file) # 使用 pandas 读取 Excel 文件 df = pd.read_excel(output_file) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

szZack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值