2017-06-20 100 views
0

我已經以Excel/CSV格式從http://www.gapminder.org/data下載了數據集「第一次結婚時的年齡(女性)」。數據集的第一行包含標題,第一列包含國家名稱。使用numpy.genfromtxt()讀取CSV文件 - 分隔符作爲行名稱的一部分

要閱讀這些數據,我使用下面的代碼。

import numpy as np 

source=open("D:\FirstMarriage.csv") 

data = np.genfromtxt(source, dtype=None, delimiter=",", skip_header=1) 
print data 

執行這個代碼(在Spyder的IDE)後,我收到此錯誤:

ValueError: Some errors were detected ! 
Line #37 (got 118 columns instead of 117) 
Line #38 (got 118 columns instead of 117) 
Line #72 (got 118 columns instead of 117) 
Line #87 (got 118 columns instead of 117) 
Line #97 (got 118 columns instead of 117) 
Line #98 (got 118 columns instead of 117) 
Line #184 (got 118 columns instead of 117) 

當我打開CSV文件,用記事本+ +和我期待的指示線我發現,這些行包含名字的名稱中有昏迷的國家。而且,這些名字被引號爲唯一可能表明這是全名的名稱。但是,它並沒有幫助我。請參考下面(我只顯示第一列)的例子:

China 
Colombia 
"Congo, Dem. Rep." 
"Congo, Rep." 
Costa Rica 

有沒有簡單的方法來清理這些數據,並作爲一個單一的字符串中引號把名字?

我在Windows 10上使用Python 2.7(Anaconda)。

謝謝!

+0

最簡單的方法是將真正的分隔符更改爲其他內容,比如';'。事先用編輯器或過濾器功能做到這一點。 'csv.reader'可以處理引用的內容,但'genfromtxt'沒有任何規定。 – hpaulj

+0

@hpaulj我已經改變了Windows設置來將分隔符寫爲';'。現在它運行良好,應該爲我的未來留下問題,因爲這個符號通常很少使用。但是,如果我使用預先描述的設置(例如公司)在不同的機器上工作,那麼我需要找到更強大的解決方案。 – Roberto

回答

2

的最佳方式,在我看來,要讀取一個CSV或任何其它字符分隔的文件是使用DataFrame類從大熊貓。您不必處理逗號的存在,因爲DataFrame遵循所有常見的CSV規範。

import pandas as pd 
data = pd.read_csv(source) 
+0

這工作非常好,它是最強大的解決方案。謝謝! – Roberto

0

numpy is quote unaware。

有2個解決方案。

  1. 添加預處理器和後處理器以將逗號更改爲|然後回來。
  2. 使用大熊貓

    import pandas 
    pandas.read_csv(filepath_or_buffer, quotechar='"').as_matrix() 
    
0

它可以使用2個csv文件來完成。首先你必須創建一個數據庫,用逗號分隔數據,並添加一個單獨的分隔符;,並刪除這些雙引號。欲瞭解更多瞭解,請訪問: https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html 使用deletechars參數。然後在生成的csv文件中使用它作爲numpy數組的輸入,只需使用分隔符作爲;

相關問題