用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。
- 添加预处理器和后处理器以将逗号更改为| 然后回来。
-
使用pandas图书馆
import pandas pandas.read_csv(filepath_or_buffer, quotechar='"').as_matrix()
它可以使用2个CSV文件来完成。 首先,你将不得不创build,以减轻你的数据逗号,并添加一个单独的分隔符说;
并消除目前的双引号。 有关更多理解,请访问: https : deletechars
使用deletechars
参数。 然后在生成的csv文件中使用它作为numpy数组的input,只需使用分隔符作为;