2017-06-20 269 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数组的输入,只需使用分隔符作为;

相关问题