【问题标题】:Save a list of array of different length to csv将不同长度的数组列表保存到csv
【发布时间】:2016-03-11 04:32:52
【问题描述】:

我有data_pressure,这是一个 numpy 数组的列表,例如:

array([ 268752.,  26222.,  261152.,  260958.]),
array([ 123433., 98239., 98932.]),
array([ 2893789., 872398., 92839., 9283982., 7632762., 547627.,])

每个数组都有不同的长度。

我使用 Python 的 csv 模块将这个数组列表保存到文件中:

import csv

csvfile = "csvfile.csv"

with open(csvfile, "w") as output:
   writer = csv.writer(output, lineterminator='\n')
   for line in data_pressure:
       writer.writerow(line)   

一切都像一个魅力,但当我读到它时

import csv
data = []
with open('csvfile.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
        data.append(np.asarray(row))

我明白了

array([ '268752.0',  '26222.0',  '261152.0',  '260958.0']),
array([ '123433.0', '98239.0', '98932.0']),
array([ '2893789.0', '872398.0', '92839.0', '9283982.0', '7632762.0', '547627.0',])

那么任何数组中的每个值都是字符串类型而不是浮点数。

有没有办法绕过这个问题?

【问题讨论】:

  • 知道了:np.asarray(row,dtype=float) 只需添加 dtype 即可。

标签: python arrays csv numpy


【解决方案1】:

你可以像这样传递quoting=quote.QUOTE_NONNUMERIC

spamreader = csv.reader(csvfile, quoting=quote.QUOTE_NONNUMERIC)

the docs:

指示编写器对象引用所有非数字字段。

指示读者将所有未加引号的字段转换为浮点类型。

【讨论】:

    【解决方案2】:

    csv 是一个文本文档,因此将数值存储为字符串。一旦将数组加载到 numpy 数组对象中,就可以将数组的类型转换为浮点数。

    您可以使用this 方法将其从字符串数组转换为浮点数组。

    x = np.array(['1.1', '2.2', '3.3'], dtype='|S4')
    y = x.astype(np.float)
    

    【讨论】:

      【解决方案3】:

      您可以修改代码的阅读部分如下。

      import csv
      data = []    
      with open('csvfile.csv', 'rb') as csvfile:
          spamreader = csv.reader(csvfile)`enter code here`
          for row in spamreader:
              data.append(np.asarray(row).astype('float64'))      #Modified line
      

      谢谢。

      【讨论】:

        猜你喜欢
        • 2021-09-13
        • 1970-01-01
        • 2020-10-29
        • 2014-05-03
        • 2020-06-22
        • 2014-11-09
        • 1970-01-01
        • 2019-04-07
        • 2017-08-04
        相关资源
        最近更新 更多