ParserError: Error tokenizing data. C error: Expected 8 fields in line 8, saw 10 完整解决方案

ParserError: Error tokenizing data. C error: Expected 8 fields in line 8, saw 10
作者注:建议你先耐心阅读完此内容,然后参考解法对应修改;如果您只想知道具体修改内容可对比1.2节和第3部分内容直接修改程序。

1、错误

1.1、 报错内容截图

报错内容截图

1.2 原代码 [ 1 ] ^{[1]} [1]

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
seeds = pd.read_csv('..\dataPractice/data/seeds_dataset.txt',sep="\t")
print('数据集形状为:', seeds.shape)
# 处理数据
seeds_data = seeds.iloc[:,:7].values
seeds_target = seeds.iloc[:,7].values
seeds_names = seeds.columns[:7]
stdScale = StandardScaler().fit(seeds_data)
seeds_dataScale = stdScale.transform(seeds_data)
# 构建并训练模型
kmeans = KMeans(n_clusters = 3, random_state=42).fit(seeds_data)
print('构建的K-Mneabs模型为:\n',kmeans)

2、分析

  • 发现错误的时候就蒙了,第一反应,立马百度,或许某位大佬的博客有!!!(事实并非如此)
    • 解法一 [ 2 ] ^{[2]} [2]seeds = pd.read_csv('..\dataPractice/data/seeds_dataset.txt',sep="\t",error_bad_lines=False)
      实话实说,这个方法用了之后,还是会报错,但是不影响程序运行,本人有强迫症,所以继续寻找更合适的解决办法。
    • 解法二 [ 3 ] ^{[3]} [3]:无意中看到engine='python',就想着既然报的是C error是不是可以把这行代码添加到程序里:seeds = pd.read_csv('..\dataPractice/data/seeds_dataset.txt',sep="\t",error_bad_lines=False,engine='python')`
      结果还是不行。
    • 重新思考问题,返回查看出现问题的代码,打开文件查看数据,经查是数据格式不规则(附下图),导致读取有错误。
      在这里插入图片描述
      可以看出第8行数据并未对齐
      秃然脑子里蹦出个想法,sep="\t"其实就是正则表达式的意思,在读取数据的时候以一个制表符为间隔读取数据(sep : 输出文件的字段分隔符,默认为 “,”),只是第8行数据多了一个制表符,所以将sep="\t"替换为sep="\t+",结果还会出现错误:
      在这里插入图片描述
      仍然是C错误,所以添加上述解法二的代码:
seeds = pd.read_csv('..\dataPractice/data/seeds_dataset.txt',sep="\t+",engine='python')

发现与书本数据相比少了一个样本,输出后查看是因为第一行数据被当作行标题了,于是继续修改代码:

seeds = pd.read_csv('seeds_dataset.txt',header = None,sep="\t+",engine='python')

至此为止,大功告成!!!

3、附正确程序:

修改部分

seeds = pd.read_csv('seeds_dataset.txt',header = None,sep="\t+",engine='python')

完整程序

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
seeds = pd.read_csv('seeds_dataset.txt',header = None,sep="\t+",engine='python')
print(seeds)
print('数据集形状为:', seeds.shape)
# 处理数据
seeds_data = seeds.iloc[:,:7].values
seeds_target = seeds.iloc[:,7].values
seeds_names = seeds.columns[:7]
stdScale = StandardScaler().fit(seeds_data)
seeds_dataScale = stdScale.transform(seeds_data)
# 构建并训练模型
kmeans = KMeans(n_clusters = 3, random_state=42).fit(seeds_data)
print('构建的K-Mneabs模型为:\n',kmeans)

[1]黄红梅, 张良均, 张凌, 施兴, 周东平. Python数据分析与应用[M].人民邮电出版社:, 201804.182-183.
[2] https://blog.csdn.net/shuiyixin/article/details/88930359
[3] https://blog.csdn.net/qq_43242266/article/details/103816278

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值