2010-08-13 51 views
1

对不起,我同意,真的写得不好:更换空数据集

以2: 我有超过50个数据集数据的多列(最多63个)。我只提取需要的3列数据并将其写入新的.csv文件。有一些我的数据集没有第三个期望的数据列。但没关系,我可以将它留空(或插入另一个值,如“ - ”或其他)。我不想打开所有的文件来找出哪些文件有什么。该错误消息我得到的,当我试图从一个不存在的列中提取数据为:

IndexError: list index out of range 

有没有办法,我可以写来解决这个循环? 我对python真的很陌生,在我的脑海中似乎很容易,但是当我尝试实际做到这一点时非常困难。

感谢

+2

你正在做什么**同样的事情**?为什么你会尝试从不存在的列中提取数据?如果我是你,我只是不这样做...... (换句话说,你的问题写得很糟糕,几乎不可理解,请重新编写。) – chryss 2010-08-13 13:08:06

+0

提供错误但没有示例数据的荣誉想弄清楚你在做什么有点困难 – 2010-08-13 13:10:49

+0

什么事?什么样的数据集?什么专栏?什么代码?什么输出文件?等等......“>>> from pychic import read_mind”“ImportError:没有名为pychic的模块”。抱歉。 – ddaa 2010-08-13 13:12:48

回答

0

基于错误信息,我猜你有一个看起来是这样的(一个粗略的简化)列表的列表:

[[0,1,2,3], 
[1,2,3,4,5], 
[1,2,3], 
[1,2,3]] 

而你正在尝试做的如下:

for xrange(4)中的行: for col in xrange(4): #something else? 打印数据[行] [COL]

然后你得到你的错误,因为值中的一个不以指数3有一个元素:

+------------------------+ 
| Index: | 0 | 1 | 2 | 3 | 
+------------------------+ 
|Value: | 1 | 2 | 3 | <----- No value at index 3 
+--------------------+ 

取决于你在哪里得到你最初的数据,有几种不同的方式来完成你想要完成的任务。

如果您提供样本I/O,您将得到更好的答案。

0

我假设你正在做这样的事情:

for line in file: 
    parts = line.split() 
    blah = line[2] 

而且等等一些线不存在。

您可以检查列表的长度:

if len(parts) > 2: 
    blah = line[2] 
else: 
    blah = "" # or whatever 

没有任何的示例代码很难更精确,但是这可能是你在做什么,一个快速简便的修复。

+0

谢谢! – 2010-08-13 13:50:07

0

而不是通过所有的数据循环的开始之前,你可以只捕获异常,并适当地处理它:

try: 
    a = list[57] 
except IndexError: 
    a = '-'