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
|