问题介绍
我用numpy写的一段代码,就是用逗号分隔符读取泰坦尼克号数据.csv文件里的数据:
import numpy as np
with open('泰坦尼克号数据.csv', encoding = 'utf-8') as f:
csv_data = np.loadtxt(f, str, delimiter=',')
print(csv_data)
点击运行后报错:
ValueError: Wrong number of columns at line 2
问题分析
首先看这句报错是什么意思:第二行列数错误。
然后顺理成章地想到为什么第二行的列数不对呢?是不是数据单元格也含有逗号,在执行delmiter= ','的时候在这个不该切分的地方也切分了呢?
因此去Excel查看,果然在Name这一列有多余的逗号:
这就导致了第二行比第一行多1列,也就导致了第二行列数错误的出现。
解决方法
知道原因后就能解决啦,由于我是为了完成numpy作业才遇到的这个问题,所以我就投机取巧,采取了一个投机的方法:在Excel中,查找并替换逗号(注意:英文格式 , )为冒号(:)
然后把csv文件另存为‘泰坦尼克号数据2.csv’ ,修改代码加载新的csv文件:
import numpy as np
with open('泰坦尼克号数据2.csv', encoding = 'utf-8') as f:
csv_data = np.loadtxt(f, str, delimiter=',')
print(csv_data)
点击运行后不报错,顺利将csv_data打印了出来:
[['PassengerId' 'Survived' 'Pclass' ... 'Fare' 'Cabin' 'Embarked']
['1' '0' '3' ... '7.25' '' 'S']
['2' '1' '1' ... '71.2833' 'C85' 'C']
...
['889' '0' '3' ... '23.45' '' 'S']
['890' '1' '1' ... '30' 'C148' 'C']
['891' '0' '3' ... '7.75' '' 'Q']]
经验总结
产生这种错误的原因就是出现了列数不等的情况,因此需要根据Wrong number of columns at line (?)问号处提示的行号,定位原始数据中首次出现列数不等错误的行,从而找到造成列数不等的原因。