【问题标题】:Reading CSV file with numpy.genfromtxt() - delimiter as a part of a row name使用 numpy.genfromtxt() 读取 CSV 文件 - 分隔符作为行名的一部分
【发布时间】:2017-11-23 11:01:21
【问题描述】:

我从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

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

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

先谢谢了!

【问题讨论】:

  • 最简单的方法是将真正的分隔符更改为其他内容,例如;。事先使用编辑器或过滤器功能执行此操作。 csv.reader 可以处理引用的材料,但genfromtxt 对此没有任何规定。
  • @hpaulj 我已将 Windows 设置更改为将分隔符写入;。现在它可以正常工作,并且应该为我将来避免问题,因为这个符号通常很少使用。但是,如果我使用预先描述的设置(例如公司)在另一台机器上工作,那么我需要找到一个更强大的解决方案。

标签: python excel csv numpy


【解决方案1】:

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

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

【讨论】:

  • 这真的很好,它是最强大的解决方案。谢谢!
【解决方案2】:

numpy 不知道引用。

有两种解决方案。

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

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

【讨论】:

    【解决方案3】:

    可以使用 2 个 csv 文件来完成。您必须创建第一个以消除逗号中的数据并添加单独的分隔符,例如 ; 并消除那些存在的双引号。更多了解请访问: https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html 使用deletechars 参数。然后在生成的 csv 文件中将其用作 numpy 数组的输入,只需将分隔符用作 ;

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多