首页 文章

使用带有numpy数组的csv模块

提问于
浏览
1

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

我想使用csv reader将文件的每一行读入字符串数据列表,然后将该字符串列表加载到一个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数据结构中 .

1 回答

  • 0

    您也许可以将 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 ,但如果第一行包含列名,后者通常可以正常工作 .

相关问题