pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 38384, saw 2

在处理数据时遇到ParserError,原因是直接将.xlsx文件后缀改为.csv导致。正确做法是使用'另存为'方式,确保数据格式正确。忽视文件格式差异会引发解析错误。

问题描述:

处理数据时,出现了bug,本来已经找小的文件测试过,按理说是没有问题的,不知道为什么会一直有这个错误。在网上找了解决方法,一直没有解决,直到看到了一篇文章,终于解决了问题。

File "pandas\_libs\parsers.pyx", line 847, in pandas._libs.parsers.TextReader.read
  File "pandas\_libs\parsers.pyx", line 862, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas\_libs\parsers.pyx", line 918, in pandas._libs.parsers.TextReader._read_rows
  File "pandas\_libs\parsers.pyx", line 905, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas\_libs\parsers.pyx", line 2042, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 38384, saw 2

原因分析:

主要是因为我懒,直接把三个.xlsx文件,直接改后缀名,变成了.csv文件,但其实是不可以的,两者还是有区别的。所以造成处理数据一直报错。


解决方案:

把.xlsx文件改成.csv文件时,不能直接改后缀名,要用另存为,改成csv文件。

原文件链接

当出现 `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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值