【发布时间】:2015-07-02 15:28:21
【问题描述】:
我有一个脚本,它以 CSV 格式读取一些测量数据,然后用它进行各种绘图和填充。
现在我有了一个新数据集,有些白痴认为在行尾添加一些随机 cmets 很有帮助,如下所示:
01.02.1988 00:00:00 ; 204.94
01.03.1988 00:00:00 ; 204.87 ; something
01.04.1988 00:00:00 ; 205.41
01.05.1988 00:00:00 ; 205.64 ; something ; something else
01.06.1988 00:00:00 ; 205.59 ; also something
01.07.1988 00:00:00 ; 205.24
这让我很开心
ValueError: Expected 2 fields in line 36, saw 3
等等。
根据this和this,我在阅读时必须使用names=['whatever','else']参数。
但不知何故,这有各种各样的错误。所以这里有一些例子:
CSV 文件
Stuff
more stuff I dont need
Date;level;crap1;crap2;crap3;crap4;crap5;crap6
01.01.1988 00:00:00 ; 204.87
01.02.1988 00:00:00 ; 204.94
01.03.1988 00:00:00 ; 204.87
“漂亮”的标题显然是“手工制作的”,但我应该可以跳过它!?
CSV 阅读器
ValReader = pd.read_csv(csv_list[counter],sep=r'\s*;',skiprows=DateStart,names=['Date','level','crap1','crap2','crap3','crap4','crap5','crap6'],usecols=['Date','level'],index_col='Date',dayfirst=True,parse_dates=True)
我得到了什么
print 'ValReader'
level
Date
Date level
01.04.2003 00:00:00 200.76
01.05.2003 00:00:00 200.64
01.06.2003 00:00:00 200.53
随后,将级别作为字符串处理。
好吧,很简单,CSV 中的手动标题行(在以前的版本中运行良好,只需要处理好的数据)是罪魁祸首,所以我只是将 skiprows 设置为 skiprows=DateStart+1,但结果在
ValueError: Number of passed names did not match number of header fields in the file
显然,我完全迷失了 pandas 如何处理列的名称和位置。
【问题讨论】: