【问题标题】:Use csv module with numpy array将 csv 模块与 numpy 数组一起使用
【发布时间】:2014-05-21 20:48:22
【问题描述】:

如何使用 csv 模块阅读器将已解析的行存储在 numpy 数组中?我想使用 csv 模块,因为它支持 quotechar 并且我的数据有许多嵌入的逗号。我有一个非常广泛的异构数据文件。我已将列名和 numpy 数据类型存储在元组列表中。

我想使用 csv 阅读器将文件的每一行读入字符串数据列表,然后将该字符串列表加载到基于数据类型强制值的 numpy 数组中。这甚至可能吗?我发现有人提到有人同时使用 csv 模块和 numpy/scipy,但我还没有看到实际的实现。

这是我目前所拥有的:

这是我的 dtypes 数组的示例:

In [0]: np_dtypes[20:30]
Out[0]:
[('out_sec_range', dtype('S16')),
 ('out_p_city_name', dtype('S16')),
 ('out_st', dtype('S16')),
 ('out_z5', dtype('S16')),
 ('out_zip4', dtype('S16')),
 ('out_lat', dtype('S16')),
 ('out_long', dtype('S16')),
 ('out_county', dtype('S16')),
 ('out_geo_blk', dtype('S16')),
 ('out_addr_type', dtype('S16'))]

这是我正在处理的导入数据的功能:

def import_csv(f, dtypes):
     with open(f, 'r') as csvfile:
          reader = csv.reader(csvfile, delimiter=',', quotechar='"')
          next(reader, None)
          for row in reader:
               # this fails
               data = np.array(row, dtype=dtypes)
               print data

我的主要目标是能够将带有嵌入式逗号的 csv 文件导入到 numpy 数据结构中。

【问题讨论】:

  • 你的意思是像 matplotlib.mlab.csv2rec() 这样的东西吗?尽管我不知道它如何处理带引号的分隔符,但这会创建一个“recarray”。无论如何,它是 csv 模块的包装器,并用纯 python 编写,因此它的源代码可能很容易根据您的目的进行调整和/或用作模型。

标签: python arrays csv numpy scipy


【解决方案1】:

您也许可以将np.genfromtxt() 与处理每一行的函数一起使用:

def myfunc(line):
    return line.replace('"', '') # removing the quotes


a = np.genfromtxt((myfunc(line) for line in open(fname)), dtype=None)

注意:您可以使用dtype 代替None,但如果您的第一行包含列名,后者通常可以正常工作。

【讨论】:

    猜你喜欢
    • 2014-01-05
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2017-08-29
    相关资源
    最近更新 更多