使用numpy.genfromtxt()读取CSV文件 - 将分隔符作为行名

时间:2017-06-20 18:48:51

标签: python excel csv numpy

我已经下载了数据集"第一次婚姻的年龄(女性)"来自Excel {CSV格式的http://www.gapminder.org/data。数据集的第一行包含标题,第一列包含国家/地区的名称。

要阅读这些数据,我使用下面的代码。

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

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

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

提前致谢!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

numpy引用不知道。

有两个解决方案。

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

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

答案 2 :(得分:0)

可以使用2个csv文件来完成。首先你需要创建一个来减轻逗号中的数据并添加一个单独的分隔符;并删除那些双引号。欲了解更多信息,请访 https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html 使用deletechars参数。然后在生成的csv文件中使用它作为numpy数组的输入,只需将分隔符用作;