使用np.genfromtxt在numpy中导入python中的文本文件

时间:2017-11-21 03:04:07

标签: python arrays numpy

我想使用Numpy的genfromtxt函数导入文本文件。

我无法这样做,因为它说有太多值要解压缩。

Traceback (most recent call last):
File "C:\Users\loges\AppData\Roaming\Sublime Text 3\Packages\User\test4.py", line 12, in <module>
filling_values={-1:0})
ValueError: too many values to unpack (expected 4)
[Finished in 1.1s]

我尝试根据我在网上找到的例子来定义变量,但似乎没有一个对我有用。

有人可以帮我识别我的错误吗?

这是我的文本文件的一个例子,它分别是XYZ坐标和temp。

-7                        -9.000000000000002       -3                       622.0582425616101
-6.500000000000001        -9.000000000000002       -3                       622.1498719223513
-6                        -9.000000000000002       -3                       622.2415012830924

这是我的代码。我想找到最高和平均温度值。这只是前3行。它是一个包含大量数据行的文件。

import numpy as np 

x, y, z, t = np.genfromtxt('C:\\Users\\loges\\OneDrive\\Documents\\School\\ME4101A FYP\\temperature600.txt',
             skip_header=0, skip_footer=0,
             unpack = True,
             names= ['x', 'y', 'z', 't'],
             dtype = [('x', float), ('y', float), ('z', float), ('t', float)],  
             usecols = (-1), 
             missing_values={-1:""},
             filling_values={-1:0})

print("Max Temp :", t.max())

2 个答案:

答案 0 :(得分:0)

此处np.genfromtxt返回3个值而不是4,这是您的第一个问题。其次,如果您试图获得最高温度,为什么要将单个变量(x,y,z,t)分配给返回值?这就是我要做的事情:

import numpy as np 

temps = np.genfromtxt('C:\\Users\\loges\\OneDrive\\Documents\\School\\ME4101A FYP\\temperature600.txt',
             skip_header=0, skip_footer=0,
             unpack = True,
             names= ['x', 'y', 'z', 't'],
             dtype = [('x', float), ('y', float), ('z', float), ('t', float)],  
             usecols = (-1), 
             missing_values={-1:""},
             filling_values={-1:0})

data #=> array([(622.0582425616101,), (622.1498719223513,), (622.2415012830924,)], dtype=[('t', '<f8')])

print("Max Temp :", temps.max())

答案 1 :(得分:0)

In [91]: txt=b"""-7                        -9.000000000000002       -3          
    ...:              622.0582425616101
    ...: -6.500000000000001        -9.000000000000002       -3                  
    ...:      622.1498719223513
    ...: -6                        -9.000000000000002       -3                  
    ...:      622.2415012830924"""

使用dtype,无需解压缩。只需使用生成的结构化数组:

In [88]: dt=np.dtype([('x', float), ('y', float), ('z', float), ('t', float)])
In [92]: data = np.genfromtxt(txt.splitlines(),dtype=dt)
In [93]: data
Out[93]: 
array([(-7. , -9., -3.,  622.05824256), 
       (-6.5, -9., -3.,  622.14987192),
       (-6. , -9., -3.,  622.24150128)],
      dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8'), ('t', '<f8')])
In [94]: data['x']
Out[94]: array([-7. , -6.5, -6. ])
In [95]: data['t']
Out[95]: array([ 622.05824256,  622.14987192,  622.24150128])
In [96]: _.max()
Out[96]: 622.24150128309236

genfromtxt只有usecols只创建一个数组,而不是4:

In [97]: np.genfromtxt(txt.splitlines(),skip_header=0, skip_footer=0,
    ...:              unpack = True,
    ...:              names= ['x', 'y', 'z', 't'],
    ...:              dtype = [('x', float), ('y', float), ('z', float), ('t', f
    ...: loat)],  
    ...:              usecols = (-1), 
    ...:              missing_values={-1:""},
    ...:              filling_values={-1:0})
    ...:              
Out[97]: 
array([( 622.05824256,), ( 622.14987192,), ( 622.24150128,)],
      dtype=[('t', '<f8')])