代码之家  ›  专栏  ›  技术社区  ›  n328

如何将指数格式的值从csv读取到numpy数组中?

  •  0
  • n328  · 技术社区  · 2 年前

    我有这种格式的值,其中e+002等是指数:

     1.25663709640503E+0000    2.33967334032059E-0001
     2.51327419281006E+0000    4.85565841197968E-0001
     3.76991128921509E+0000    3.30846726894379E-0001
     5.02654838562012E+0000    5.50593174993992E-0002
     6.28318548202515E+0000    3.12543800100684E-0003
     7.53982257843018E+0000    4.11923155188560E-0002
     8.79645919799805E+0000    1.35717853903770E-0001
     1.00530967712402E+0001    1.26785650849342E-0001
     1.13097343444824E+0001    2.28818021714687E-0002
     1.25663709640502E+0001    3.12676839530468E-0003
     1.38230075836181E+0001    2.36203446984291E-0002
     1.50796451568603E+0001    7.74327516555786E-0002
     1.63362827301025E+0001    7.97238126397133E-0002
     1.75929183959961E+0001    1.36453993618488E-0002
     1.88495559692383E+0001    3.12899192795157E-0003
    

    我尝试使用以下代码将它们读入numpy数组:

    import numpy as np
    
    with open(r"fft_in.XY") as file_name:
        array = np.loadtxt(file_name, delimiter=",")
    
    print(array)
    

    但是,它不起作用,我得到以下错误:

    Traceback (most recent call last):
      File "D:\Python_projects\rt_fft\main.py", line 4, in <module>
        array = np.loadtxt(file_name, delimiter=",")
      File "C:\Users\achim\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\lib\npyio.py", line 1148, in loadtxt
        for x in read_data(_loadtxt_chunksize):
      File "C:\Users\achim\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\lib\npyio.py", line 999, in read_data
        items = [conv(val) for (conv, val) in zip(converters, vals)]
      File "C:\Users\achim\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\lib\npyio.py", line 999, in <listcomp>
        items = [conv(val) for (conv, val) in zip(converters, vals)]
      File "C:\Users\achim\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\lib\npyio.py", line 736, in floatconv
        return float(x)
    ValueError: could not convert string to float: ' 0.00000000000000E+0000    0.00000000000000E+0000'
    

    有人可能知道,是否有一个内置函数可以将这种格式的数字从csv读取到numpy数组中?非常感谢您的回复和想法!

    1 回复  |  直到 2 年前
        1
  •  0
  •   Lars Nielsen    2 年前

    问题不在于你的代码,它实际上工作得很好。 问题是你的数据。

    请注意,在这一行中:

    array = np.loadtxt(file_name, delimiter=",")
    

    你有 delimiter="," 但你没有 , 在您的数据中? 如果将数据替换为:

     1.25663709640503E+0000,2.33967334032059E-0001
     2.51327419281006E+0000,4.85565841197968E-0001
     3.76991128921509E+0000,3.30846726894379E-0001
     5.02654838562012E+0000,5.50593174993992E-0002
     6.28318548202515E+0000,3.12543800100684E-0003
     7.53982257843018E+0000,4.11923155188560E-0002
     8.79645919799805E+0000,1.35717853903770E-0001
     1.00530967712402E+0001,1.26785650849342E-0001
     1.13097343444824E+0001,2.28818021714687E-0002
     1.25663709640502E+0001,3.12676839530468E-0003
     1.38230075836181E+0001,2.36203446984291E-0002
     1.50796451568603E+0001,7.74327516555786E-0002
     1.63362827301025E+0001,7.97238126397133E-0002
     1.75929183959961E+0001,1.36453993618488E-0002
     1.88495559692383E+0001,3.12899192795157E-0003
    

    然后,您的脚本工作正常,因为它使用了numpy期望的分隔符。

    要使其与您拥有的数据一起工作,您应该更改:

    数组=np。loadtxt(文件名,分隔符=,“”)
    

    收件人:

    array = np.loadtxt(file_name, delimiter="    ")
    

    尽管您必须确保分隔符始终包含相同数量的空格