用numpy.genfromtxt()读取CSV文件 – 分隔符作为行名称的一部分

我已经从http://www.gapminder.org/data以Excel / 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) 

当我用Notepad ++打开csv文件,并查找指定的行时,我发现这些行包含名称中有昏迷的国家的名称。 而且,这些名字被引号为唯一可能表明这是全名的名称。 但是,这并没有帮助我。 请看下面的例子(我只显示第一列):

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

有没有简单的方法来清理这些数据,并将引号中的名称视为单个string?

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

谢谢!

在我看来,读取csv或任何其他字符分隔文件的最好方法是使用Pandas中的DataFrame类。 您不必处理逗号的存在,因为DataFrame遵循所有常见的CSV规范。

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

numpy是不知情的报价。

有2个解决scheme。

  1. 添加预处理器和后处理器以将逗号更改为| 然后回来。
  2. 使用pandas图书馆

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

它可以使用2个CSV文件来完成。 首先,你将不得不创build,以减轻你的数据逗号,并添加一个单独的分隔符说; 并消除目前的双引号。 有关更多理解,请访问: https : deletechars使用deletechars参数。 然后在生成的csv文件中使用它作为numpy数组的input,只需使用分隔符作为;