2010-08-13 52 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 = '-'